8款 JDK 自带的监控和故障处理工具,定位问题太方便了!
Posted Java知音_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8款 JDK 自带的监控和故障处理工具,定位问题太方便了!相关的知识,希望对你有一定的参考价值。
目录
jps--虚拟机进程查看工具
jstat--虚拟机统计监视工具
jinfo--虚拟机配置信息工具
jmap--虚拟机内存映象工具
jhat--虚拟机HeapDump分析工具
jstack--java堆栈跟踪工具
Jconsole和VisualVM
visualVM分析OutOfMemoryError异常
jdk本身为我们定位java相关的生产问题提供了内置的工具,这些内置的工具用好了足以应对常见的大多数生产问题,这篇就将jdk自带命令行和可视化工具做一下汇总介绍。
jps–虚拟机进程查看工具
类似于ps命令,输出虚拟机进程信息,第一列为LVMID跟pid是一致的。
jstat–虚拟机统计监视工具
虚拟机统计信息监视工具,监视虚拟机各种运行状态比如GC的统计信息。
比如:每250毫秒查询一次进程垃圾收集状况,一共查询20次。
#格式:jstat [option] lvmid interval count
$jstat -gc 17936 250 20
解释:
「C:」 容量
「U:」 使用量
「E:」 eden区
「O:」 老年代
「M:」 元数据区
「YGC:」 YoungGC次数
「YGCT:」 YoungGC花费总时间
「FGC:」 FullGC次数
「FGCT:」 FullGC花费总时间
jinfo–虚拟机配置信息工具
实时查看和调整虚拟机各项参数
比如:查看进程17936的System.properties()
信息
jinfo -sysprops 17936
查看老年代触发gc百分比
$jinfo -flag CMSInitiatingOccupancyFraction 17936
jmap–虚拟机内存映象工具
jmap命令用于生成heapdump文件,也就是“堆转储快照”。
其他方式如:-XX:HeapDumpOnOutOfMemoryError
或者kill -3 pid
# 给进程为17936生成dump二进制文件,名称为jeffdump.bin
$jmap -dump:format=b,file=jeffdump.bin 17936
# 打印
C:\\Users\\Administrator>jmap -dump:format=b,file=jeffdump.bin 17936
Dumping heap to C:\\Users\\Administrator\\jeffdump.bin ...
Heap dump file created
jhat–虚拟机HeapDump分析工具
jhat内置了一个微型的http/html服务器,生成dump文件的分析结果后,可以在浏览器中查看。
一般不会再服务器上直接用jhat分析dump,毕竟耗时耗资源,而且jhat分析功能简陋,一般可以用VisualVM或者Eclipse Memory Analyzer。
$jhat jeffdump.bin
C:\\Users\\Administrator>jhat jeffdump.bin
Reading from jeffdump.bin...
Dump file created Wed Apr 29 17:30:48 CST 2020
Snapshot read, resolving...
Resolving 1831310 objects...
Chasing references, expect 366 dots.............
................................................
................................................
................................................
.....................................
Eliminating duplicate references................
................................................
................................................
................................................
..................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
打开浏览器:http://localhost:7000/
分析内存泄露问题主要使用到Heap Histogram,可以找到内存中总容量最大的对象
jstack–java堆栈跟踪工具
生成虚拟机当前时刻的线程快照,即threaddump或者javacore文件。也就是当前虚拟机每一条线程正在执行的方法堆栈集合,可以用来定位线程长时间停顿的原因,比如线程间死锁、死循环、请求外部资源导致的长时间等待。
$jstack -l 17936
Jconsole和VisualVM
jconsole和visualVM 是jdk提供的两个可视化监控工具。VisualVm是jdk发布的功能最强大的运行监视和故障处理工具。比专业收费的Jprofiler、youkit都不逊色多少。
VisualGC: 非jdk自带的工具,IDEA也有插件可以安装。
jmc:BEA公司JDK带的工具。需要装oracle的jdk才有。生产环境不建议使用,太重可能干扰线上服务。
visualVM分析OutOfMemoryError异常
对于CMS收集器来说,如果超过98%的时间都在GC,而只有不足2%的内存恢复,则会抛出
OOM:GC overhead limit exceeded
。不过可以设置-XX:-UseGCOverheadLimit
关闭这个异常的抛出。不过仍然可能会抛出OOM:Java Heap sapce
异常!或者OOM:unable to creare new native thread.
使用jdk自带的工具java VisualVM来分析
-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
生成的java_pid9516.hprof
文件,也可以使用Eclipse Memory Analyzer打开。
作者:jeff.sheng
来源:blog.csdn.net/shengqianfeng/article/
details/117415508
推荐
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!
以上是关于8款 JDK 自带的监控和故障处理工具,定位问题太方便了!的主要内容,如果未能解决你的问题,请参考以下文章