查找死循环-飞行记录仪的使用

        日前发现公司系统调用缓存Memcached的次数暴增,一台机器1小时达到上千万次,通过日志分析,发现有几个缓存ID频繁调用,最多者一小时调用了百万次,当时的CPU、IO也是巨高。故使用jcmd方法打印了thread信息、heap_dump信息、飞行记录仪信息。现将jcmd打印过程简要介绍如下:

  • 现获得java的线程ID,用ps -ef|grep java方法;
  • 用su www -lc "jcmd 14048 help" 方法获得jcmd可以打印的信息,如
             
  • 用su www -lc "jcmd 14048 Thread.print">>/tmp/thread.out  打印线程信息至/tmp/thread.out
  • 用su www -lc "jcmd 14048 GC.heap_dump /tmp/heap_dump.out" 打印dump信息至/tmp/heap_dump.out
  • 用 su www -lc "jcmd 21953 JFR.start name=test duration=60s settings=default.jfc filename=output3.jfr"  命令打印飞行记录仪信息,其实飞行记录仪还可以使用jmc.exe来打印。
         下面就再来说说分析这三个文件的方法
  • thread.out直接more 或者 cat就可以,但是没有发现问题
  • heap_dump.out用ibm的HeapAnalyzer分析,可以搜索ha.jar,这个也没有发现问题
  • 最后就是飞行记录仪信息,用JDK下的jmc.exe分析,通过分析这个文件代码、线程的热点线程,找到了死循环的代码。如图
            

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值