对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出jstack和内存信息,然后重启系统,尽快保证系统的可用性。
通过jstack排查
通过top命令查看当前系统最高CPU(P)、内存(M)占用进程,获取其PID,通过以下命令进一步查看线程情况。
导出jstack信息:
jstack <PID> > /tmp/jstack.txt  # 强制导出使用-F查看进程相关线程信息:
top -Hp <PID>
以上图为例,寻找PID为14003相关线程的信息,先把14003转换为16进制:
THREAD_PID=14003
echo "obase=16;${THREAD_PID}" | bc
# 36B3查找jstack.txt中nid=0x36B3相关的信息
如果指向VM Thread一行,而VM Thread指的就是垃圾回收的线程。通过如下命令可以查看GC的情况:
# 每1秒输出PID进程的gc信息,输出10次
jstat -gcutil <PID> 1000 10
如果FGC过高,则疑似内存溢出导致的系统缓慢。
通过jmap导出内存镜像
jmap -dump:format=b,file=/data/heap.hprof <PID>
导出文件为/data/heap.hprof可以通过eclipse的mat工具进行查看。
          赏
          
            
              
              使用支付宝打赏
            
            
              
              使用微信打赏
            
          
        
        若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
