jvm虚拟机性能调优实战-第一章-java项目CPU占用100%线上排查方法

一、场景

linux下使用top命令发现cpu占用高的java项目及进程id
在这里插入图片描述

二、案例代码

编写死循环代码

在这里插入图片描述

启动脚本start.sh

在这里插入图片描述

在启动脚本中加入了JMX的端口是9998

二、检查诊断

1、查看java线程使用资源情况

top -Hp pid

top -Hp 8622

8622是进程id

在这里插入图片描述

我们发现当前有5条线程的cpu占用很高

2、定位代码

方法1、使用linux命令

1)、找到对应的线程之后,比如是8688占用高,则通过命令转换16进制

printf '%x' 8688
# 得到
21f0

2)、用jstack保存现场

jstack 8688 > /tmp/8688.txt

3)、vim打开8688.txt

# 用斜杆/搜索21f0

最终定位到我们自己的代码

扫描二维码关注公众号,回复: 14139377 查看本文章

方法2、使用JDK可视化工具jvisualvm工具定位代码

找到工具

在jdk的安装路径中找到该工具,例如:D:\Program Files\Java\jdk1.8.0_151\bin
在这里插入图片描述

连接jmx

在java程序的start.sh中已经配置了jmx,且端口是9998
在这里插入图片描述
切换到线程页面,发现了我们自己写的线程
在这里插入图片描述

通过线程Dump分析线程及定位代码行

在这里插入图片描述
将上述Dump信息拷贝到文本,用文本编辑器打开搜索我们自己的包名
在这里插入图片描述

代码已经定位到DeadLoopController.java的第59

特别感谢参考:https://www.ixigua.com/6842644783408611851?id=6842129797049483780&logTag=b175c62ffa380a3617ea

猜你喜欢

转载自blog.csdn.net/Blueeyedboy521/article/details/124746175