本文详细介绍了如何排查和定位系统中高 CPU 使用情况,特别是针对 Java 进程的高 CPU 问题。主要步骤包括:首先通过 `top` 命令查看系统整体 CPU 使用情况,重点关注用户态和内核态的 CPU 占比;其次,使用 `top` 命令定位高 CPU 的 Java 进程,并记录其 PID;最后,通过 `top -H -p <PID>` 命令查看该进程下的线程 CPU 占用情况,并将高消耗线程的 TID 转换为 16 进制,使用 `jstack` 抓取该线程的堆栈信息,分析 `RUNNABLE` 状态的线程以确定 CPU 消耗原因。
常见的高 CPU 场景包括正则表达式灾难性回溯、频繁序列化大对象以及线程池积压等问题。文章还补充了线上应急排查的建议,推荐使用 `top + jstack` 组合,并提到在容器环境中如何进行排查。总结指出,CPU 飙高排查的核心是通过系统、进程、线程/堆栈三步递进,关键命令包括 `top`、`printf`、`jstack`,常见问题多为正则回溯、大对象序列化和线程池积压。
疑难杂症
16
cenyuio