综上所述,正确的命令应该是: bash jstack pid | grep -A 30 tid 请将pid替换为目标Java进程的PID,将tid替换为要搜索的线程ID。这样,命令将输出包含指定线程ID的堆栈跟踪信息,以及该信息之后的30行内容,有助于诊断线程相关的问题。
将线程ID转换为16进制格式,然后使用jstack pid |grep tid -A 30命令打印线程堆栈信息,从而定位到问题代码。例如,发现ShortSocketIO.readBytes(ShortSocketIO.java:106)中的循环条件可能导致CPU占用过高。问题代码为:如果this.in.read()返回的数据小于等于0时,循环就会一直执行。在网络拥塞时,这种情况...
接下来,使用ps -mp pid -o THREAD,tid,time找出耗时最高的线程ID,如线程28802。将线程ID转换为16进制格式后,使用jstack pid |grep tid -A 30打印出线程堆栈信息。通过分析线程堆栈信息,可以定位到出现问题的代码,例如在ShortSocketIO.readBytes(ShortSocketIO.java:106)方法中,如果this.in.read...
根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。 通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题。但是,怎么定位到具体线程或者代码呢? 首先显示线程列表: ps -mp pid -o THREAD,tid,time 找到了耗时最高的线程28802,占用CPU时间快两个小时了! 其次将需要的线程ID转换为16进...
jstack pid |grep tid -A 30 找到出现问题的代码了!现在来分析下具体的代码:ShortSocketIO.readBytes(ShortSocketIO.java:106)ShortSocketIO是应用封装的一个用短连接Socket通信的工具类。readBytes函数的代码如下: public byte[] readBytes(int length) throws IOException { if ((this.socket == null) || (...
jstack [-l] <pid> (to connect to running process)#连接活动线程 jstack -F [-m] [-l] <pid> (to connect to a hung process)#连接阻塞线程 jstack [-m] [-l] <executable> <core> (to connect to a core file)#连接dump的文件
root@ubuntu:/# ps-ef|grep mrf-center|grep-v grep root217111114:47pts/300:02:10java-jar mrf-center.jar 得到进程ID为21711,第二步找出该进程内最耗费CPU的线程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid,我这里用第三个,输出如下: ...
2.根据pid,查找占用cpu较高的线程:ps -mp pid -o THREAD,tid,time 如图所示:找到占用cpu最高的tid (可以使用sort命令排序:sort -k 3 -r -n) 3.将tid转换为16进制的数字:printf “%x\n” tid 4.使用jstack命令,查询线程信息,从而定位到具体线程和代码:jstack pid | grep 7ccd -A 30 ...
jstack -l pid | grep “waiting for“得到:那么0x02bcf000 ,0x02bce400这两个线程产生了死锁 l...
得到进程ID为21711,第二步找出该进程内最耗费CPU的线程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid,我这里用第三个,输出如下: TIME列就是各个Java线程耗费的CPU时间,CPU时间最长的是线程ID为21742的线程,用 1 printf "%x\n" 21742 得到21742的十六进制值为54ee,下面会用...