jps命令
- jvm process status tool, 虚拟机进程状况工具
- 可以列出正在运行的虚拟机进程, 并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一id
- 用法
- jps -l 显示主类名称. windows下有些进程的主类为什么不显示?
- jps -m 显示main函数参数
- jps -v 显示虚拟机进程启动时的jvm参数, 每启动一个项目都会有一个虚拟机进程
jstat命令
- jvm statistics monitoring tool, 虚拟机统计信息监视工具
- 显示进程的类加载, 内存, 垃圾收集, 即时编译等运行时数据
- 用法
- 监视java堆状况
// 输出1秒内的信息, 输出两次
jstat -gc 103097 1000 2
S0C列, 第一幸存区的总大小, 单位是kb
S0U列, 第一幸存区已使用的大小
OC列, 老年代的总大大小
MC列, 永久代的总大小
CCSC列, 压缩类空间的总大小
YGC列, 年轻代垃圾回收次数
YGCT列, 年轻代垃圾回收总时间, 单位是秒
GCT列, 垃圾回收总时间
2. 堆内存统计, 输出主要关注java堆各个区域使用到的最大, 最小空间
jstat -gccapacity 103097 1000 2
NGCMN列, 年轻代最小容量
NGCMX列, 年轻代最大容量
NGC列, 年轻代当前容量
3. 总结垃圾回收统计, 输出主要关注已使用空间占总空间的百分比
jstat -gcutil 103097 1000 2
S0列, 第一幸存区当前使用的比例
YGC列, 年轻代垃圾回收次数
YGCT列, 年轻代垃圾回收总时间, 单位是秒
4. 输出导致上一次垃圾收集产生的原因
jstat -gccause 103097 1000 2
LGCC列, 最近一次垃圾收集的原因
GCC列, 当前垃圾收集的原因
5. 新生代垃圾回收统计
jstat -gcnew 103097 1000 2
TT列, 对象在新生代的存活次数
MTT列, 对象在新生代的最大存活次数
DSS列, 期望的幸存区大小
6. 新生代内存统计
7. 元空间内存统计
jstat -gcmetacapacity 103097 1000 2
8. 输出即时编译器编译过的方法, 耗时等信息
jstat -compiler 103097 1000 2
Compiled列, 编译成功数
Invalid列, 无效数量
FailedType列, 最后一次编译失败类型
FailedMethod列, 最后一次编译失败的方法
9. 输出已经被即时编译的方法
jstat -printcompilation 103097 1000 2
Compiled列, 最近编译方法的数量
Size列, 最近编译方法的字节码数量
Type列, 最近编译方法的编译类型
Method列, 方法名标识
9. 类加载统计, 监视类加载, 卸载数量, 总空间以及类装载所耗费的时间
jstat -class 103097
jinfo命令
- java配置信息工具
- 实时查看和调整虚拟机各项参数
- 用法
- 查询未被显式指定的参数的系统默认值
jinfo -flag CMSInitiatingOccupancyFraction 103097
2. 输出虚拟机进程的System.getProperties()的内容
jinfo -sysprops 103097
- 调整虚拟机参数
jinfo -flag user.dir=/usr 103097
jmap命令
- java内存映像工具
- 用于生成堆转储快照, 还可以查询finalize队列,java堆和方法区的详细信息如空间使用率, 当前用的哪种收集器
- 用法
- 生成java堆转储快照
jmap -dump:format=b,file=netty-demo.bin 103097
2. 显示在F-Queue中等待Finalizer线程执行finalize方法的对象
jmap -finalizerinfo 103097
3. 显示java堆详细信息, 如使用哪种回收器, 参数配置, 分代状况等.
jmap -heap 103097
4. 显示堆中对象统计信息, 包含类, 实例数量, 合计容量
jmap -histo 103097
5. 以classloader为统计口径显示永久代内存状态
jmap -clstats 103097
jhat命令
- 虚拟机堆转储快照分析工具
- 类似工具
visual vm
eclipse memory analyzer
ibm heap analyzer - 用法
// 分析结果默认以包为单位进行分组显示,分析内存泄漏问题主要会使用到其中的“Heap Histogram”(与jmap-histo功能一样)与OQL页签的功能,前者可以找到内存中总容量最大的对象,后者是标准的对象查询语言,使用类似SQL的语法对内存中的对象进行查询统计。
jhat netty-demo.bin
jstack命令
- java堆栈跟踪工具
- 用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者 javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间挂起等,都是导致线程长时间停顿的常见原因。线程出现停顿时通过jstack来查看各个线程的调用堆栈, 就可以获知没有响应的线程到底在后台做些什么事情,或者等待着什么资源。
- 用法
// -l参数, 用于输出除堆栈外关于锁的附加信息
// 从JDK 5起,java.lang.Thread类新增了一个getAllStackTraces()方法用于获取虚拟机中所有线程的StackTraceElement对象。
jstack -l 103097