基本工具的使用
1、jps:虚拟机进程状况工具
可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID。
命令格式:jps [options] [hostid]
-q 只输出本地虚拟机唯一ID,省略主类的名称
-m 输出虚拟机进程启动时传递给主类main()函数的参数
-l 输出主类的全名,如果进程执行的是JAR包,则输出JAR路径
-v 输出虚拟机进程启动时启动的JVM参数
例子:
2、jstat:虚拟机统计信息监视工具
用于监视虚拟机各种运行状态信息,它显示虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据。
命令格式:jstat [option vmid [interval [m|ms] [count]] ]
参数interva和count代表查询间隔和次数,如果省略说明只查询一次
例子:jstat -gc 2764 250 20 (每250毫秒查询一次进程2764垃圾收集状况,一共查询20次)
3、jinfo:Java配置信息工具
实时查看和调整虚拟机各项参数
命令格式:jinfo [option] pid
4、jmap:Java内存映像工具
用于生成堆转储快照(heapdump或dump文件),或者使用
-XX:+HeapDumpOnOutOfMemoryError参数,可以让虚拟机在内存溢出异常出现之后自动生成堆转储快照文件。
它还可以查询finalize执行队列,Java堆和方法区的详细信息(如空间使用率、当前使用的哪种收集器)
命令格式:jmap [option] vmid
-dump 生成堆转储快照
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalizer方法的对象
-heap 显示Java堆详细信息,如使用哪种回收器、参数配置、分代状况等
-histo 显示堆中对象统计信息,包括类、实例数量、合计容量
-permstat 以ClassLoader为统计口径显示永久代内存状态
-F 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照
5、jhat:虚拟机堆转储快照分析工具(不推荐)
分析jmap命令生成堆快照文件
一般不会在服务器上直接分析快照文件,分析文件是一个耗时且耗费硬件资源的过程,而且jhat这个工具比较简陋,所以不推荐使用。
6、jstack:Java堆栈跟踪工具
用于生成虚拟机当前时刻堆线程快照,线程快照就是当前虚拟机内的每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因(如线程间死锁、死循环、请求外部资源导致的长时间挂起等)。
命令格式:jstack [option] vmid
-F 当正常输出请求不被响应时,强制输出线程堆栈
-l 除堆栈外,显示关于锁的附加信息
-m 如果调用到本地方法的话,可以显示C/C++的堆栈
例子: