线上服务器CPU彪高的调试方式

时间:2022-11-14 13:48:28

原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/2fee7b91-fc6e-4e96-838a-b6926b422368

线上服务器CPU彪高的调试方式

1. 使用TOP获取对应的CPU彪高的进程ID

2. top -p 8948 -H 查看8948进程所对应的所有线程,查看引起CPU彪高的线程PID,此处为9037

3. jstack 8948 >/home/xiaoi/8948thread1.txt 打印当前的线程堆栈信息至txt文件当中(尽可能的将2,3步骤同时进行,否则可能出现top所查看得到的线程ID,在导出堆栈信息时已经不再引起CPU彪高了)

4.将所得到的线程PID转换为16进制,如此处的9037转换为16进制后的结果为234d(堆栈信息中存储的是16进制的线程ID,而我们在通过TOP获取到的线程ID为10进制的ID,故需要做一下转换操作)

5.得到对应的转换为16进制后的线程ID为 234d,此时使用vim 查看对应的8948thread1.txt堆栈文件,直接搜索 ?234d 查看对应的234d线程的堆栈信息,发现线程是持续的
RUNNABLE运行状态,查看异常可知是代码底层所调用的谷歌文本对比插件所引起的死循环导致

使用 出现下述提示:说明当前执行jstack 8948命令的用户不是8948这个进程启动时的用户,重新切换用户为创建该进程的用户后,再执行该命令则 jstack 8948
8948: well-known file is not secure

使用jstack分析cpu消耗过高的问题 -1

使用jstack分析cpu消耗过高的问题 -2

使用jstack分析cpu消耗过高的问题 -3


jstack 工具的使用以及堆栈信息中线程状态的解释和说明

jstack线程dump输出状态解释

jstack和线程dump分析

使用Jstack分析线程状态

jvm源码分析之Object.wait/notify实现