JVM-调优之-高cpu线程问题排查

这里主要是对jstack命令的使用;

程序在运行过程中卡主,前端无法访问,一看服务器CPU占用达到200到300%多。

排查思路

1)找出占用高的进程

2)找出占用高的线程

3)找出具体的代码

分析步骤:

第一步:使用 top 找到占用 CPU 最高的 Java 进程 pid (1966)

第二步:用 top -Hp pid 命令查看占用 CPU 最高的线程

top -Hp 1966

shift+p 按cpu排序,shift+m 按内存排序

就可以获取到这个进程下面所有线程,通过查看%CPU找到最耗费CPU的是线程PID 2912

第三步:用 printf '%x\n' PID 线程id转换成16进制 b60

printf '%x\n' 2912

b60

第四步,使用jstack 获取对应的线程信息

jstack 1966 | grep b60

结果报了一个错误:1966: Unable to open socket file: target process not responding or HotSpot VM not loaded

The -F option can be used when the target process is not responding

解决方案:

首先检查用户权限,jstack需要使用与进程一致的用户才能执行,即使是root,命令加上sudo

如果是使用了docker来启动,解决方法:需要进入到容器中去执行jstack命令。

jstack 1966 | grep b60 -C4 --color,找到具体的代码

找到前后四行的代码

第五步,用转换的16进制在线程栈的信息里全局搜索,线程名称,线程状态,具体的哪一行代码都可以查到

参考文章:

JVM线程、内存问题排查_jvm 线程8000多-CSDN博客

jstack日志深入理解_jstack日志分析-CSDN博客

相关推荐
a9511416422 小时前
c++如何解析二进制协议中的可选字段读取逻辑及其反序列化【详解】
jvm·数据库·python
weixin_580614002 小时前
golang如何实现时间格式化_golang时间格式化方法详解
jvm·数据库·python
forEverPlume2 小时前
c++怎么利用std--span实现在不拷贝数据的前提下解析大规模文件【进阶】
jvm·数据库·python
HHHHH1010HHHHH2 小时前
Tailwind CSS如何快速定义固定宽高比_使用aspect-square实现CSS正方形
jvm·数据库·python
m0_515098422 小时前
c++怎么获取文件的Inode节点信息_stat结构体深度解析【详解】
jvm·数据库·python
m0_674294642 小时前
HTML怎么限制输入字符数_HTML input maxlength属性用法【详解】
jvm·数据库·python
逻辑驱动的ken2 小时前
Java高频面试考点场景题13
java·开发语言·jvm·面试·求职招聘·春招
maqr_1102 小时前
layui table单元格编辑 layui表格如何实现可编辑
jvm·数据库·python
z4424753262 小时前
HTML函数开发用旋转屏有优势吗_特殊硬件形态适配说明【方法】
jvm·数据库·python
2501_914245933 小时前
SQL如何统计分组内满足条件的唯一项_COUNT与DISTINCT
jvm·数据库·python