美文网首页Java技术升华
Java线上服务CPU过载问题快速定位

Java线上服务CPU过载问题快速定位

作者: caison | 来源:发表于2017-09-19 21:13 被阅读71次
CPU过载

概述

  本文介绍一次解决线上服务Java进程CPU过载问题的经过,提供了如果定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载,希望能提供后续遇到类似情况的读者一点思路。

线上环境发现的问题

  测试人员在测试环境发现,机器卡顿,CPU占用率相当高。

基本解决方案

  基于工具先定位具体Java线程,然后定位Java线程运行的代码块

解决过程

  线上环境使用操作系统是linux,机器需要先设置好JAVA_HOME环境变量。

1、定位Java线程所属的进程

命令:top -c
得到显示进程运行信息列表
定位得到CPU占用过高的JAVA进程的PID为11721

定位进程PID

2、定位最耗CPU的线程

命令:top -Hp 11721
11721是进程PID,得到进程的线程运行信息列表
定位得到最耗CPU的线程PID有3个,分别是12687,12678,12555

定位最耗CPU的线程

3、把线程PID转为16进制

命令:printf "%x\n" 12687
12687是线程id
得到CPU占用最高的3个16进制的线程ID:0x318f、0x3186、0x310b

计算线程ID十六进制

4、查看线程运行的堆栈信息

命令:jstack 11721 | grep '0x318f' -C9 --color
11721是进程PID,0x318f是线程的16进制的ID
定位得到3个运行堆栈信息,就可以定位问题代码:

0x318f.png 0x3186.png 0x310b.png 微信图片_20180706090650.png

相关文章

网友评论

    本文标题:Java线上服务CPU过载问题快速定位

    本文链接:https://www.haomeiwen.com/subject/gsugsxtx.html