🏀事情起因:
大家好,我是JavaDog程序狗
今天给大家来分享一下如何使用jstack排查定位CPU高占用问题
你想听的故事
******
jstack 是一个用于诊断 Java 应用程序线程问题的工具,它主要用来生成 Java 虚拟机(JVM)在某一时刻的线程堆栈快照。 这个快照包含了JVM 内所有线程的信息,包括它们正在执行的方法、调用堆栈以及可能的阻塞点。
👽人话解释
jstack 就像是给你的Java 程序做的一次“体检”,特别是检查程序里的“线程”是否健康。
想象一下,你的程序就像是一个繁忙的工厂,有很多工人(线程)在同时工作,有的在搬运货物(执行任务),有的在等待机器(等待资源),还有的可能因为某些原因卡住了(死锁或挂起)。
当你发现程序运行变慢或者卡住时,jstack 就能派上用场了。它会告诉你每个工人(线程)当前在做什么,他们在哪里停下了手头的工作,或者是否在等待其他工人的帮助。这样,你就可以找出是谁在捣乱,为什么程序会变慢,然后采取措施解决问题。
******
top
服务器使用top命令,查看占用cpu过高的java进程pid
如果java进程少,还可以通过jps -l 拿到java进程pid
jps -l
top -Hp 31411
使用top -Hp 31411,31411就是上方占用最高的java进程pid。
可以查看该进程下,各个线程的cpu使用情况,找到对应的最高占用率的pid,也就是31413
printf '%x\n' 3141
使用printf '%x\n' 31413将线程号转化为16进制显示
jstack 31411 | grep '7ab5' -C5 --color
通过jstack打印进程31413的堆栈信息,并只过滤出线程7ab5的堆栈信息
最后查看报错提示行数,找到源码,成功定位
高效利用jstack诊断Java应用性能问题
jstack是快速诊断Java应用性能瓶颈的关键工具,掌握其使用可有效提升应用稳定性
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。