调试命令
jps
显示指定系统内所有的HotSpot虚拟机进程。
命令格式:jps [options] [hostid]
命令参数:(可不写)
[options]:操作格式,
-l 输出主类全名或jar路径
-q 只输出LVMID
-m 输出jvm启动时传递给main()的参数
-v 输出jvm启动时显示指定的JVM参数
jstat
监视虚拟机运行时状态信息(类装载、内存、垃圾收集、JIT编译等)。
命令格式:jstat [option] LVMID [interval] [count]
命令参数:
option :操作参数
-class 监视类装载、卸载数量、总空间以及耗费时间
-compiler 输出JIT编译过的方法数量耗时等
-gc 垃圾回收堆的行为统计
-gccapacity 在gc的基础上输出java堆各区域使用到的最大、最小空间
-gcutil 在gc的基础上输出已使用空间占总空间的百分比
-gccause 同gcutil,附加最近俩次垃圾回收事件的原因
-gcnew 统计新生代的行为,其中TT和MTT可以获取对象存活的年龄和最大年龄
-gcnewcapacity 新生代与其相应的内存空间的统计
-gcold 统计老年代的行为
-gcoldcapacity 统计老年代的大小和空间
-gcpermcapacity 统计永生代的行为
-printcompliation 输出Hotspot编译方式统计
LVMID :本地虚拟机进程ID
interval :连续输出的时间间隔
count : 连续输出的次数
jstat -gc 列名含义
S0C:From Survivor 区的大小
S1C:To Survivor 区的大小
S0U:From Survivor 区当前使用的内存大小
S1U:To Survivor 区当前使用的内存大小
EC:Eden 区的大小
EU:Eden 区当前使用的内存大小
OC:老年代的大小
OU:老年代当前使用的内存大小
MC:方法区(永久代,元数据区)的大小
MU:方法区(永久代,元数据区)当前使用大小
YGC:系统运行至此Young GC 的次数
YGCT:Young GC 的耗时
FGC:系统运行至此Full GC 的次数
FGCT:Full GC 的耗时
GCT:所有GC的总耗时
jmap
生成heap dump 文件、查询finalize执行队列、查询java堆和永生代的详细信息。
命令格式:jmap [option] LVMID
命令参数:
option:操作参数
-dump 生成堆转储快照
-finalizeinfo 显示 F-Queue队列等待Finalizer线程执行Finalizer方法的对象
-heap 显示java堆详细信息
-histo 显示堆中对象的统计信息
-permstat 打印java堆内存的永久保存区域的类加载器的智能统计信息
-F 当-dump无响应时,强制生成dump快照
常用命令:
jmap -dump:live,format=b,file=dump.hprof PID
jhat
与Jamp搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可在浏览器中查看。
命令格式:jhat [option] [dumpfile]
命令参数:
option:操作参数
-stack false|true 关闭|打开对象分配调用栈跟踪
-refs false|true 关闭|开启对象引用跟踪
-port port-number 设置jhat HTTP Server 的端口号,默认是7000
-exclude exclude-file 执行对象查询时需要排除的数据成员列表文件
-baseline exclude-file 指定一个基准堆转储
-debug int 设置debug 级别
-version 启动后只显示版本信息就退出
-J<flag> 传入启动参数,比如 -J-Xmx512m
dumpfile:dump文件
常用命令:
jhat dump.hprof -port 7000
jstack
用于生成java虚拟机当前时刻的线程快照。
命令格式:jstack [option] LVMID
命令参数:
option:操作参数
-F:当正常输出请求不被响应式,强制输出线程堆栈
-l:出堆栈外,显示关于锁的附加信息
-m:如果调用本地方法,可以显示C/C++的堆栈
LVMID:本地虚拟机进程ID
jinfo
实时查看和调整虚拟机运行参数。
命令格式:jinfo [option] [args] LVMID
命令参数:
option:操作参数
-flag:输出指定args参数
-flags:不需要args参数,输出所有的JVM参数的值
-sysprops 输出系统属性
args:JVM参数
LVMID:虚拟机进程ID
调试工具
JDK自带工具
jconsole
是从java5开始,在JDK中自带的java监控和管理控制台,用于对JVM中内存,线程和类等的监控,是一个基于JMX (java management extensions) 的GUI性能检测工具。jconsole使用jvm的扩展机制获取并展示虚拟机中运行的用用程序的性能和资源消耗等信息。
位置:jdk/bin下面jconsole.exe
VisualVM
VisualVM是一个工具,它提供了一个可视界面,用于查看java虚拟机上运行的基于java技术的应用程序的详细信息。
位置:jdk/bin下面jvisualvm.exe
第三方工具
MAT
MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的java heap 分析工具,它可以帮助查找内存泄漏和减少内存消耗。
GChisto
GChisto是一款专业分析gc日志的工具,可以通过gc日志来分析:Minor GC、Full GC 的时间频率等等,通说列表、报表、图表等不同的形式来反应GC的情况。
gcviewer
gcviewer也是一款分析的小工具,用于可视化查看由 Sun/Oracle ,IBM,HP和EBA java虚拟机产生的垃圾收集器的日志。
GC Easy
这是一个web工具,在线使用非常方便。
地址:http://gceasy.io。
线上监控
监控系统:Zabbix、OpenFalcon、Ganglia。