在上一篇文章我们介绍了 JVM 常用参数,下面我们就来看看有哪些基本命令。
1.jps
查看java进程。结果为进程ID和进程名
2.jinfo
查看环境信息,实时查看和调整JVM配置参数
1)查看 java 系统属性
等同于System.getProperties()。格式:jinfo -sysprops 21880
2)查看JVM参数
格式:jinfo -flag name PID (查看某个进程的name属性的值)
jinfo -flag MaxHeapSize PID # PID的最大堆内存
jinfo -flag UseG1GC PID # PID是否启动G1 (+是-否)
格式:jinfo -flags PID
参数只有被标记为manageable的flags可以被实时修改
格式:jinfo -flag [+|-] PID jinfo -flag = PID
3.jstat
查看虚拟机性能统计信息
1)查看类装载信息
格式:jstat -class PID 1000 10 (查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10次)
- Loaded:加载class的数量
- Bytes:所占用空间大小
- Unloaded:未加载数量
- Bytes:未加载占用空间
- Time:时间
2)查看垃圾收集信息
格式:jstat -gc PID 1000 10 (查看某个java进程的gc情况,每1000毫秒输出一次,共输出10次)
- S0C:第一个Survivor区的空间
- S1C:第二个Survivor区的空间
- S0U:第一个Survivor区的使用空间
- S1U:第二个Survivor区的使用空间
- EC:Eden区的总空间
- EU:Eden区的使用空间
- OC:Old区的总空间
- OU:Old区的已使用空间
- MC:元空间的总空间
- MU:元空间的使用空间
- CCSC:压缩类的总空间
- CCSU:压缩类的使用空间
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收消耗时间
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
4.jstack
查看线程堆栈信息(运行情况) ==> 死锁排查/CPU飙高。格式:jstack PID
下面演示一个排查死锁案例。死锁简单说就是 线程1拿着对象A的锁等对象B的锁,同时线程B拿着对象B的锁等对象A的锁。
运行结果如下:
这是在ide中还可以Debug,那如果在运行环境中出现了死锁问题,如何排查呢?
将打印信息拉到最后可以发现:
5.jmap
查看内存情况,生成堆转储快照
1)统计堆的对象
格式:jmap -histo > 7824
- Num:序号
- Instances:实例数量
- Bytes:占用空间大小
- Class Name:类名
2)打印出堆内存相关信息
准备:-XX:+PrintFlagsFinal -Xms300M -Xmx300M jmap -heap PID
格式:jmap -heap PID
3)dump出堆内存相关信息
格式:jmap -dump:format=b,file=heap.hprof PID
有没有什么办法在发生堆内存溢出时自动dump出该文件?
一般在开发中,JVM参数可以加上下面两句,这样内存溢出时,会自动dump出该文件
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof
关于dump下来的文件可以结合工具进行分析,这块后面再说…




















还没有评论,来说两句吧...