使用工具:top、jstack、jmap、eclipse MAT。
线上机器突然CPU使用率飙高,发出告警,立马登录机器,使用top命令查看到底哪个进程占用的cpu使用率最高。
使用jstack pid > loop.txt 打印进程的堆栈信息,然后使用 top -Hp pid 查看进程中哪个线程 使用的cpu率最高,使用
printf "%x" threadId 打印出最占用线程的16进制数,将loop.txt下载本地,打开,用刚才打印出的16进制的threadId
匹配文件中的nid,来查到最占用线程的堆栈信息,查看发生了什么。在loop.txt的文件尾部,如果程序中有死锁,也会打印
出来。
如果线上发生堆益出等错误,可以使用jmap命令,jmap -dump:live,format=b,file=dump201612271310..hprof pid 下载最耗
进程的堆文件,下载到本地,使用eclipse的mat工具,打开堆文件,进行相应的分析。
参考文章:
MAT的安装和使用:
https://blog.youkuaiyun.com/kas_uo/article/details/80179856
https://blog.youkuaiyun.com/kas_uo/article/details/80179856
jvm 性能调优工具之 jstat:
https://www.jianshu.com/p/213710fb9e40
https://blog.youkuaiyun.com/lengyue309/article/details/80590119
jmap工具的使用:
https://www.jianshu.com/p/a4ad53179df3
堆文件的下载:
https://blog.youkuaiyun.com/amosjob/article/details/82988953
示例博客:
https://blog.youkuaiyun.com/zzti_erlie/article/details/85602307