jvm虚拟机性能监控与故障处理工具

定位问题,知识经验是关键基础。
数据是依据,而工具是处理的手段。

在java的bin目录下,sun公司给我们提供了,这些个工具。


image.png

这个工具,很短小犀利,小是因为主要作用是封装到了lib下的tools.jar代码里了。实际的工具是封装的命令行去调用的。

jps
跟linux命令ps功能类似

image.png

jstat
查看收集hotspot虚拟机各方面的运行数据
比如参数-gcutil 监视java堆状况,包括Eden区,survivor区,老年代,永久代的容量,已用空间,gc的时间等信息。显示百分比

jstat -gcutil 84099 1000
image.png

jinfo
查看和调整虚拟机的各项参数
jps -v参数可以查看初始化启动时的虚拟机参数。但是有些默认项可能没显示出来,需要使用jinfo去查看。

jmap
java的内存映像工具。
用于生成堆转储快找(dump文件)。
生成dump文件一种方法是,在启动的jvm参数里,使用
-XX:+HeapDumpOnOutOfMemoryError参数,程序在OOM后会自动生成dump文件。
还有一种方法是,是用jmap指令,参数-heap ,-histo 是打印详细的信息。
分析dump文件一般比较耗资源,费时间。
市面上有很多成熟的分析工具,要是要分析,内存泄漏和内存溢出原因的。

jhat
jhat就是分析dump文件的一种工具,但是相对比较简陋些,比较好的方法还是copy到别的地方,是用三方工具去分析,更常见些。
VisualVm,Eclipse Memory Analyzer,IBM heapAnalyzer(mark需要时用)

jstack
java的栈跟踪工具,用于生成虚拟机当前时刻的线程快照(threaddump文件)。线程快照里包含了每个线程的堆栈信息。
生成她的原因是为了定位,导致线程长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致长时间的等待

除了使用jstack工具外,还有个方法可以打印线程的堆栈信息。
Thread类里有个getAllStackTraces()方法。可以做个工具,调用这个方法来实现分析线程栈信息。

之前文章在排查cpu使用率100%有使用到这个工具,参考: 线上机器cpu占用率100%问题排查

可视化工具JConsole,VisualVM(mark)


full gc问题排查:

留下线程快照jstack
留下dump内存分配信息jmap
hashmap是线程不安全的。并发环境下,在拓容的情况下会形成环状链表,导致死循环。

一次full gc的排查过程

参考:《深入理解Java虚拟机》周志明

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容