show-busy-java-threads查找CPU占用高
Posted 21aspnet
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了show-busy-java-threads查找CPU占用高相关的知识,希望对你有一定的参考价值。
背景:需要查找线上CPU占用过高的Java线程在做什么。
可以使用top命令找出占CPU高的进程
#top 然后按shift+C 按CPU占比排序
然后把进程中占比高的线程id找出来,这个是常见的套路,但是这样做比较繁琐。
可以使用show-busy-java-threads工具包快速定位,确实好用。
1.下载安装
下载
#wget https://github.com/oldratlee/useful-scripts/archive/release.zip
解压
#unzip useful-scripts-release.zip
这是介绍:useful-scripts/java.md at master · oldratlee/useful-scripts · GitHub
show-busy-java-threads
# 从所有运行的Java进程中找出最消耗CPU的线程(缺省5个),打印出其线程栈
# 缺省会自动从所有的Java进程中找出最消耗CPU的线程,这样用更方便
# 当然你可以手动指定要分析的Java进程Id,以保证只会显示你关心的那个Java进程的信息
show-busy-java-threads -p <指定的Java进程Id>
show-busy-java-threads -c <要显示的线程栈数>
show-busy-java-threads <重复执行的间隔秒数> [<重复执行的次数>]
# 多次执行;这2个参数的使用方式类似vmstat命令
show-busy-java-threads -a <运行输出的记录到的文件>
# 记录到文件以方便回溯查看
show-busy-java-threads -S <存储jstack输出文件的目录>
# 指定jstack输出文件的存储目录,方便记录以后续分析
##############################
# 注意:
##############################
# 如果Java进程的用户 与 执行脚本的当前用户 不同,则jstack不了这个Java进程
# 为了能切换到Java进程的用户,需要加sudo来执行,即可以解决:
sudo show-busy-java-threads
show-busy-java-threads -s <指定jstack命令的全路径>
# 对于sudo方式的运行,JAVA_HOME环境变量不能传递给root,
# 而root用户往往没有配置JAVA_HOME且不方便配置,
# 显式指定jstack命令的路径就反而显得更方便了
# -m选项:执行jstack命令时加上-m选项,显示上Native的栈帧,一般应用排查不需要使用
show-busy-java-threads -m
# -F选项:执行jstack命令时加上 -F 选项(如果直接jstack无响应时,用于强制jstack),一般情况不需要使用
show-busy-java-threads -F
# -l选项:执行jstack命令时加上 -l 选项,显示上更多相关锁的信息,一般情况不需要使用
# 注意:和 -m -F 选项一起使用时,可能会大大增加jstack操作的耗时
show-busy-java-threads -l
# 帮助信息
$ show-busy-java-threads -h
2.使用
#./show-busy-java-threads
参考:JVM那点事—show-busy-java-threads排查CPU性能问题 - 简书
以上是关于show-busy-java-threads查找CPU占用高的主要内容,如果未能解决你的问题,请参考以下文章