remote server IP or hostname: 远程调试服务器的 IP 地址或主机名
选项 描述-dump 生成 Java 堆转储快照。
-finalizerinfo 显示在 F-Queue 中等待 Finalizer 线程执行 finalize 方法的对象。Linux平台
-heap 显示 Java 堆详细信息,比如:用了哪种回收器、参数配置、分代情况。Linux 平台
-histo 显示堆中对象统计信息,包括类、实例数量、合计容量
-permstat 显示永久代内存状态,jdk1.7,永久代
-F 当虚拟机进程对 -dump 选项没有响应式,可以强制生成快照。Linux平台
6.1.5、jhat:虚拟机堆转储快照分析工具
jhat(JVM Heap Analysis Tool),与 jmap 配合使用,用于分析 jmap 生成的堆转储快照。
jhat 内置了一个小型的 http/web 服务器,可以把堆转储快照分析的结果,展示在浏览器中查看。不过用途不大,基本大家都会使用其他第三方工具。
命令格式
jhat [-stack ] [-refs ] [-port ] [-baseline ] [-
debug ] [-version] [-h|-help]
6.1.6、jstack:Java堆栈跟踪工具jstack(Stack Trace for Java),用于生成虚拟机当前时刻的线程快照(threaddump、javacore)。
线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因,如:线程死锁、死循环、请求
外部资源耗时较长导致挂起等。
线程出现听顿时通过 jstack 来查看各个线程的调用堆栈,就可以获得没有响应的线程在搞什么鬼。
命令格式
jstack [ option ] vmid
选项参数:
选项 描述-F 当正常输出的请求不被响应时,强制输出线程堆栈
-l 除了堆栈外,显示关于锁的附加信息
-m 如果调用的是本地方法的话,可以显示 c/c++的堆栈
6.2、可视化故障处理工具
JDK中除了附带大量的命令行工具外,还提供了几个功能集成度更高的可视化工具,用户可以使用这些可视化工具以更加便捷的方式进行进程故障诊断和调试工作。这类工具主要包括JConsole、 JHSDB、VisualVM和JMC四个。
6.2.1、JHSDB:基于服务性代理的调试工具JDK中提供了JCMD和JHSDB两个集成式的多功能工具箱,它们不仅整合了所有 基础工具所能提供的专项功能,而且由于有着“后发优势”,能够做得往往比之前的老工具们更好、更强大。
JHSDB是一款基于服务性代理(Serviceability Agent,SA)实现的进程外调试工具。
使用以下命令进入JHSDB的图形化模式,并使其附加进程11180:
jhsdb hsdb --pid 11180命令打开的JHSDB的界面: