转载 

JDK jstack 查找CPU飙升原因的常规操作套路

分类:运维    500人阅读    IT小君  2021-06-19 15:43
背景
线上机器cpu占用率一直为100%,对照功能和对应代码大致能猜测出是因为程序处理超大文本时采用了递归导致的。接下来我们借用 jstack 打印堆栈信息用以佐证。

jstack打印堆栈信息
执行 top 找出占用cpu最高的java进程id //10

执行 top -Hp pid 找出该进程内最耗费CPU的线程 //执行 top -Hp 10 得到167

执行 printf “%x\n” pid 得到对应线程id对应的十六进制值 //a7

执行 jstack [进程id]|grep -A 50 [线程的16进制值] 打印出问题的堆栈信息的后50行 //执行jstack 10 | grep -A 50 a7

简单执行这几步就可以查看程序出问题的堆栈信息了,也印证了最初的猜想。
如果你程序用的是 OpenJDK 的话,当你执行 jstack 时就会神奇的发现,系统不支持这个命令。本人就是如此的悲催碰到了。
OpenJDK 更新支持 jstack 命令
众所周知,并不是所有版本的 OpenJDK 都支持 jstack 命令的,有的甚至 javac 都不支持,这时候我们就需要更新一下来使用 jstack 了。

执行 java -version 查看jdk版本信息

执行 yum whatprovides ‘*/jmap’ 查看openJDK有jmap的yum源

选择合适自己的带有 devel 的版本进行更新,例如本人的选用如下红字的版本:
1: java-1.8.0-openjdk-devel-1.8.0.242.b08-1.el7.x86_64 : OpenJDK Development Environment 8
Repo : @base
Matched from:
Filename : /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-1.el7.x86_64/bin/jmap
执行 yum install java-1.8.0-openjdk-devel-1.8.0.242.b08-1.el7.x86_64 更新指定的jdk,更新哪个版本视自己的情况
再次执行 jstack 命令,可执行即为成功。
转载于: https://blog.csdn.net/mojiewangday/article/details/108416605
点击广告,支持我们为你提供更好的服务

js+css3抽奖转盘旋转点餐代码

有机水果蔬菜HTML5网站模板

响应式时尚单品在线商城网站模板

html5 svg夜空中星星流星动画场景特效

中小型创意设计服务公司网站模板

html5 canvas进度条圆环图表统计动画特效

HTML5 Canvas竖直流动线条背景动画特效

网页设计开发公司网站模板

小众时尚单品在线电子商务网站模板

响应式咖啡饮品宣传网站模板

canvas炫酷鼠标移动文字粒子特效

HTML5现代家居装潢公司网站模板

jQuery右端悬浮带返回顶部特效

css鼠标跟随文字模糊特效

css+js实现的颜色渐变数字时钟动画特效

HTML5数字产品服务公司网站模板

html5图标下拉搜索框自动匹配代码

响应式太阳能能源公司网站模板

现代时尚家具公司网站模板

html5 canvas彩色碎片组合球形旋转动画特效

点击广告,支持我们为你提供更好的服务
 工具推荐 更多»
点击广告,支持我们为你提供更好的服务