JVM-监控及诊断工具命令行(二)

本文详细介绍了Java性能监控和诊断的常用工具,包括jps、jstat、jinfo、jmap、jhat、jstack和jcmd的使用方法,以及如何通过这些工具分析Java进程状态、JVM统计信息、内存映像、线程快照等,以诊断内存泄漏、垃圾回收问题和性能瓶颈。

1、查看正在运行的java进程(jps)

jsp -q //查看本地ip
jps -l//查看完整全类名
jps -v//列出虚拟机进程启动时的参数

2、jstat :查看JVM统计信息

jstat -class 4091

 查看类的加载数量、总空间。类装载所需要的时间

jstat -class 4091 1000//没隔一秒打印输出
jstat -class 4091 1000 10 //总共打印10次
jstat -class -t 4091  //打印程序到现在执行的时间
jstat -class -t  -h3 4091 1000 10 // -h3 每隔3秒打印一次表头
jstat -compiler 4091//显示JIT编译器编译过的方法和耗时
jstat -printcompilation 4091 //输出被JIT编译器编译的方法

垃圾回收相关:

jstat -gc 4091//显示与GC相关堆的信息。包括Eden区,两个Survior区、老年代、永久代等的容量、已用空间、GC时间合计等信息。

 jstat -gcutil 61095 1000 10//gcutil 显示与GC相同 ,但输出的是已使用空间占比总空间

jstat -gccause 63870 1000 30//cause 与gcutil功能一样,但是会额外输出导致最后一次或当前正在发生的GC产生的原因

jstat -gc -t 66417 1000 20
我们可以比较Java 进程的启动时间已经总GC时间,或者两次测量的间隔时间已经总GC时间的增量。来得出GC时间占运行时间的比例

如果该比例超过20%,则说明目前堆的压力较大,如果该比例超过90%,则说明堆里面几乎没有可用空间,随时都可能抛出OOM异常

 

补充:

1)在jstat命令数据量取几行OU的最小值

2)每隔一段时间重复上述操作。获取多组OU最小值。如果这些值呈上涨趋势。在说明老年代内存已使用量在不断上涨。这意味着无法回收的对象在不断增加。很有可能存在内存泄露

3、jinfo查看虚拟机配置参数信息,也可用于调整虚拟机的配置参数

jinfo -sysprops PId//sysprops 这个关键字部分版本JDK不支持 例如安装mac的电脑
jinfo -flags PID//  flags 部分JDK不支持该关键字
 jinfo -flag UseParallelGC PID
java -XX:+PrintFlagsFinal  -version |grep manageable //查看可以被修改的参数值

java -XX:+PrintFlagsFinal//查看所有JVM参数的最终值
java -XX:+PrintFlagsInitial//查看所有JVM参数启动的初始值

4、jmap 导出内存映像文件&内存使用情况(获取dump文件即堆转储快照文件,属于二进制文件)

手动:

jmap -dump:format=b,file=/Users/chenbiao/Downloads/1.hprof 39887
jmap -dump:live,format=b,file=/Users/chenbiao/Downloads/3.hprof 39887//输出存活的对象

自动:

添加参数:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/chenbiao/Downloads/error.hprof

jmap -histo PID 输出堆中对象的同级信息,包括类、实例数量和合计容量,也是这一时刻的内存中的对象信息

 jmap -histo 29211 >/Users/chenbiao/Downloads/b.txt

jmap -heap 32408 查看堆内存分配的情况

jmap -heap 32408

5、jhat :JDK自带堆分析工具

6、jstack 打印线程快照

        生产线程快照的作用:可用于定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等问题。当线程出现停顿,就可用jstack显示各个线程调用的堆栈情况

死锁,DeadLock

等待资源,Waiting on condition

等待获取监视器,Waiting on monitor entry

阻塞,Blocked

执行中,Runnable

jstack PID

 

 

 

jstack -l 63622 //显示除堆外,附加锁的信息

7、jcmd:多功能命令行:用来导出堆,内存使用,查看Java进程,导出线程信息,执行GC,JVM运行时间

jcmd PID help//查看ID能够查询的信息

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐路上的小人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值