龙空技术网

使用jstack 定位导致Java 进程占用CPU 过高的代码

韩宏敏思密达 1006

前言:

眼前看官们对“jstack定位g问题”都比较关心,看官们都想要剖析一些“jstack定位g问题”的相关内容。那么小编也在网上搜集了一些有关“jstack定位g问题””的相关文章,希望同学们能喜欢,小伙伴们一起来学习一下吧!

1.如果服务器上是安装的OpenJDK , 很可能没有自带jstack 工具,需要单独安装。

# 查找哪个安装包里有jstackyum whatprovides '*/jstack'# 安装当前JDK 对应版本的开发包,此处以1.7 为例java -versionyum install java-1.7.0-openjdk-devel

2.使用top 命令查看cpu 占用高的java 进程pid 。记录pid 如:27887。

3.在top 命令状态下按键H,注意是大写,也就是Shift + h。记录下cpu 高的线程tid 。如:9490,9491,10878。

4.退出top 显示, 导出堆栈日志。

jstack 27887 > 20181009.cpu.log# 有时候提示没有反应,可能需要-F 参数

5.将tid 转换为16进制。如:9490,9491,10878 分别转换为0x2512,0x2513,0x2a7e。

6.在堆栈日志中搜索16进制代码找到具体堆栈信息。

代码位置为当前CPU 正在执行的代码,并不一定是该行有问题,在附近方法中多找找,尤其是要着重检查有死循环的可能情况。

标签: #jstack定位g问题