【Bug处理系列】CPU虚高故障分析
总结步骤: 1,使用命令top -p <pid> ,显示你的java进程的内存情况,pid是你的java进程号,比如123 2,按H,获取每个线程的内存情况 3,找到内存和cpu占用最高的线程pid,比如15248 4,执行 printf 0x%x 15248 得到 0x3b90 ,此为线程id的十六进制 5,执行 jstack <pid进程>|grep -A 10 <转换的16进制线程Id>,得到线程堆栈信息中3b90这个线程所在行的后面10行 6,查看对应的堆栈信息找出可能存在问题的代码。 查看线程内存: top -H -p pid ,另一种方法通过pstree pid查到pid下所有的thread 然后top查看,按下H找到对应的线程即可。 1 故障现象 这天上午,有同事反映公司后台管理系统运行缓慢,运维同事检查发现cpu占用过高,重启服务器后故障消失。 这天下午,有同事也反映后台系统的某模块系统,运行缓慢,多次重启后故障仍然存在,使用top命令查看服务器的情况,发现cpu占用率接近100%。 2 cpu问题定位 定位问题进程 使用了top指令查看资源占用情况,发现PID为11705的进程消耗了大量的CPU资源,达到了780.4 定位问题线程 使用 ps -mp 11705 -o THREAD,tid,time 指令把该11705进程的thread,tid,time给列出来,