做影视网站风险大吗,网站开发外包 合同,精美旅游网站模板,vs做网站【JVM-04】线上CPU100% 1. 如何排查2. 再举一个例子 1. 如何排查
⼀般CPU100%疯狂GC#xff0c;都是死循环的锅#xff0c;那怎么排查呢#xff1f;先进服务器#xff0c;⽤top -c 命令找出当前进程的运⾏列表按⼀下 P 可以按照CPU使⽤率进⾏排序显示Java进程 PID 为 2609… 【JVM-04】线上CPU100% 1. 如何排查2. 再举一个例子 1. 如何排查
⼀般CPU100%疯狂GC都是死循环的锅那怎么排查呢先进服务器⽤top -c 命令找出当前进程的运⾏列表按⼀下 P 可以按照CPU使⽤率进⾏排序显示Java进程 PID 为 2609 的java进程消耗最⾼。
[rootVM-8-7-centos ~]# top -c然后我们需要根据PID 查出CPU⾥⾯消耗最⾼的进程 使⽤命令 top -Hp 2609 找出这个进程下⾯的线程继续按P排序
[rootVM-8-7-centos ~]# top -Hp 2609可以看到 2854 CPU消耗最⾼ 2854是⼗进制的我们需要转换为⼗六进制转换结果b26 接下来就需要导出我们的进程快照了看看这个线程做了啥
[rootVM-8-7-centos ~]# jstack -l 2609 ./2609.stack再⽤grep查看⼀下线程在⽂件⾥做了啥
[rootVM-8-7-centos ~]# cat 2609.stack |grep b26 -C 8这⾥就随便定位⼀个基本上这样查都可以定位到你死循环的那个类。
2. 再举一个例子
public class FullCPU {public static void main(String[] args) {while(true){}}
}java -cp . FullCPUPID (进程标识符)
[rootVM-8-7-centos ~]# top -Hp 12844结合起来top -Hp 12844 命令的作用是 -H 显示所有线程 -p12844 只显示 PID 为 12844 的进程信息
启动 top 命令。显示 PID 为 12844 的进程及其所有线程的详细信息。实时更新该进程和线程的资源使用情况。 [rootVM-8-7-centos ~]# jstack -l 12844 ./12844.stack12845转16进制为0x322d
cat 12844.stack |grep 0x322d -C 8[rootVM-8-7-centos ~]# jstack -l 12844 ./12844.stack执行这个命令后jstack 工具将生成一个包含 PID 为 12844 的 Java 进程的所有线程的当前状态的快照并将其保存到 ./12844.stack 文件中。文件内容通常包括每个线程的堆栈跟踪、线程状态以及锁信息。
完整命令cat 12844.stack | grep 0x322d -C 8
这条命令首先使用 cat 命令显示 12844.stack 文件的内容。然后通过管道符 | 将 cat 命令的输出传递给 grep 命令。grep 命令搜索包含 ‘0x322d’ 的行并显示该行及其上下 8 行的内容。