美文网首页
jvm虚拟机性能监控与故障处理工具

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

作者: 联想桥南 | 来源:发表于2017-12-10 11:07 被阅读0次

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

    在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虚拟机》周志明

    相关文章

      网友评论

          本文标题:jvm虚拟机性能监控与故障处理工具

          本文链接:https://www.haomeiwen.com/subject/rkumixtx.html