前言:这是在学习哔哩哔哩上黑马的jvm教学中看到的一道题,在此做个记录
贴上视频连接:黑马程序员JVM完整教程,全网超高评价,全程干货不拖沓_哔哩哔哩_bilibili
第一步:通过top命令找出占用cpu较多的进程id

第二步:通过ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu | grep 进程id 指令查看进程中线程占用cpu较高的线程id
第三步:通过jdk自带的工具jstack来查找线程运行情况 指令:jstack 进程id
就会将进程中的线程都列举出来,其中如图所示thread1、2、3都是用户定义的线程,根据前面找出的线程id 32655(通过ps查看到的线程id是十进制的,要先转换成16进制,然后再回到jstack中查找)

经过计算得出32665的16进制为7F99,然后再下图中找到线程号为7f99的线程为thread1,找到正执行的代码,再第8行,接下来就可以回到java源代码中去查看代码是否有问题


本文介绍了一种在JVM环境中排查线程CPU占用过高的方法。首先使用top命令找出占用CPU较多的进程ID,然后利用ps命令进一步定位到具体的线程ID。最后通过jstack工具获取线程堆栈信息,帮助开发者定位问题代码。
1万+

被折叠的 条评论
为什么被折叠?



