目录标题
- 一、基础故障处理工具
- 二、可视化故障处理工具
- 三、其他故障相关
一、基础故障处理工具
- JMC(Java Mission Control)以及JFR(Java Flight Recorder)
- JMC 从 Java7 以后包含在 JDK 中,直接输入 jmc 就能启动
- 在使用之前需要配置 Java 进程支持 JMX 连接,在启动时加入配置
- -Dcom.sun.management.jmxremote.port=7091
- -Dcom.sun.management.jmxremote.authenticate=false
- -Dcom.sun.management.jmxremote.ssl=false
- 取消锁定商业功能开启飞行记录配置(二选一)
- jcmd pid VM.unlock_commercial_features
- -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
- jps:Java Virtual Machine Process Status Tool 虚拟机进程状况工具
- 语法:jps [options] [hostid]
- -q:只输出 PID
- -m:输出传递给 main 方法的参数
- -l:完整包名或应用程序 JAR 文件的完整路径名
- -v:查看虚拟机启动时显示指定的参数列表
- 可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID
- 还可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,参数hostid为RMI注册表中注册的主机名
- 语法:jps [options] [hostid]
- jstat:虚拟机统计信息监视工具
- 用于监控虚拟机各种运行状态信息的命令行工具
- 可以显示虚拟机进程中的类加载、内存、垃圾收集、即使编译等运行时数据
- 例
- 每250毫秒查询一次进程2764垃圾收集情况,一共查询20次
- jstat -gc 2764 250 20
- 查询结果表明,2764 进行的新生代 Eden 区(E) 使用 6.2% 空间,2 个 Survivor 区(S0、S1) 里面是空的,老年代(O) 和永久代§ 分别使用 41.42% 和 47.20% 空间,MinorGC (YGC) 16次,耗时(YGCT) 0.105 秒,Full GC (FGC) 3次,耗时(FGCT) 0.472 秒,所有 GC 总耗时 (GCT) 0.577 秒
- jinfo:Java配置信息工具
- 实时查看和调整虚拟机各项参数
- jmap:Java内存映像工具
- 生成堆转储快照,还可以查询finalize执行队列、Java堆和方法区的详细信息
- jhat:虚拟机堆转储快照分析工具
- 与jmap搭配使用,分析jmap生成的堆转储信息
- 一般不会在部署应用程序的服务器上直接分析
- jstack:Java堆栈跟踪工具
- 生成虚拟机当前时刻的线程快照,同事用于定位线程出现长时间停顿的原因
二、可视化故障处理工具
- JHSDB:基于服务性代理的调试工具
- JConsole:Java监视与管理控制台
- VisualVM:多合-故障处理工具
- Java Mission Control:可持续在线的监控工具
三、其他故障相关
- 大内存硬件上的程序部署策略
- 单体应用在较大内存的硬件上主要的部署方式
- 通过一个单独的Java虚拟机实例来管理大量的Java堆内存
- 回收大块堆内存而导致的长时间停顿
- 大内存必须有64位Java虚拟机的支持
- 必须保证应用程序足够稳定,发生堆内存溢出要产生大容量的快照文件
- 相同的程序在64位虚拟机中消耗的内存一般比32位虚拟机要大
- 同时使用若干个Java虚拟机,建立逻辑集群来利用硬件资源
- 节点竞争全局的资源,最典型的就是磁盘竞争
- 很难最高效率地利用某些资源池,比如连接池
- 节点不可避免地受到32位的内存限制,每个进程只能使用2GB的内存
- 大量使用本地缓存
- 通过一个单独的Java虚拟机实例来管理大量的Java堆内存
- 单体应用在较大内存的硬件上主要的部署方式
- 集群间同步导致的内存溢出
- 堆外内存导致的溢出错误
- Java堆外内存限制
- 直接内存:可通过-XX:MaxDirectMemorySize调整大小
- 线程堆栈:可通过-Xss调整大小,内存不足抛出StackOverflowError
- Socket缓存区:每个Socket连接都Receive和Send两个缓存区
- JNI代码:如果代码中使用了JNI调用本地库,那本地库使用的内存也不在堆中
- 虚拟机和垃圾收集器:工作时需要消耗一定量的内存
- Java堆外内存限制
- 外部命令导致系统缓慢
- 服务器虚拟机进程崩溃
- 不恰当数据结构导致内存占用过大
- 由Windows虚拟内存导致的长时间停顿
- 由安全点导致长时间停顿