引言
JVM命令详细可以看前一篇文章,本篇文章基于之前的命令做一次简单的线上故障排查分析
JVM常见命令
实战
1. 一般显示都是Linux系统,我们排查winodows系统想知道CPU和内存使用情况,打开任务管理器就可以出现图形化界面,而Linux系统我们通常使用
top -Hp <PID>
来打印进程中CPU占用线程高到低
2. 打印出对应线程pid后,我们直接打印对应线程的堆栈文件
jstack <Java 进程 PID> > thread_dump.txt
PS:在文件中某个线程的pid是16进制的,这里需要一个命令帮助我们转化一下,然后再去查找
printf "%x\n" <线程 PID>
3.使用文本编辑器打开 thread_dump.txt 文件,搜索步骤 2中得到的十六进制线程 ID。
grep -i <十六进制线程 ID> thread_dump.txt -A 30
将 <十六进制线程 ID> 替换为步骤 3 中得到的十六进制值。-A 30 表示在匹配行之后再显示 30 行,这样可以看到该线程的调用栈信息。通过分析调用栈信息,就能定位到导致 CPU 占用率高的具体代码位置。
当然我们也可以直接在命令行中使用命令查看,这样更便捷
jstack <pid> | grep <线程pid的16进制编码> -A 50 --color