cpu100%如何排查 如何排查CPU使用率达到100%的问题
cpu100%如何排查
关于这个cpu100%如何排查的相关经验,一起跟随小编看看吧!
首先,先用放之四海而皆准的命令top,确认一下是不是Java进程是罪魁祸首。Java进程要不然就是个后台任务,要不然就是个 jar 包,比如一个Spring Boot 服务。
刚接触开发那会儿,别的命令都不会,一看到CPU飙升,上来就是一个 top,当top 命令执行完了,也就完了。就像一个举重选手用尽了所有力气,然后就只能呆坐在哪里了。
下面介绍两种后续操作,让我们在执行完top以后,确定是 Java 进程搞的鬼的情况下,顺利的找出出现问题的方法。
第一种,用系统工具和 JDK 自带的 jstack 工具。第二种,用 Arthas 探测工具。
使用 jstack 工具
第一步,使用 top 找到占用 CPU 最高的 Java 进程
前面说了这一步,就是使用 Top 命令

使用top命令发现占用 CPU 99.7% 的线程是 Java 进程,进程 PID 为13731。
第二步,找到占用 CPU 最高的线程
上一步用top命令找到了那个 Java 进程。那一个进程中有那么多线程,不可能所有线程都一直占着 CPU 不放,这一步要做的就是揪出这个罪魁祸首,当然有可能不止一个。
接下来,还是用 top命令,只不过加一个参数-Hp ,就是下面这样
top -Hp pid
H参数表示要显示线程级别的信息,p则表示指定的pid,也就是进程id。
代入前面得到的那个Java进程,完整的命令是这样的
top -Hp 13731
执行之后,这个Java进程中占用线程占用 CPU 的情况就列出来了。

可以看到占用 CPU 最高的那个线程 PID 为13756。
第三步,保存线程堆栈信息
这就要用到 JDK 默认提供的一个工具了,叫做 jstack。当你安装了 JDK 之后,在 bin目录下会有一大堆内置的工具,java也是其中之一,还有另外我们可能比较熟悉的 javac

jstack 用于生成 Java 进程的线程快照(thread dump)。线程快照是一个关于 Java 进程中所有线程当前状态的快照,包括每个线程的堆栈信息。通过分析线程快照,可以了解 Java 进程中各个线程的运行状态、锁信息等。
我们用jstack的目的就是将那个占用 CPU 最高的线程的堆栈信息搞下来,然后进一步分析。使用命令jstack pid > out.log将某个进程的堆栈信息输出到 out.log文件中。
当前Java程序的所有线程信息都可以通过 stack命令查看,我们用jstack命令将第一步找到的 Java 进程的线程栈保存下来。
jstack 13731 > thread_stack.log
第四步,在线程栈中查找最贵祸首的线程
第二步已经找到了这个罪魁祸首的线程 PID 是13756。
然后我们将 13756转换为 16 进制的,可以用在线进制转换的网站直接转换,比如https://tool.oschina.net/hexconvert 这个,转换结果为 0x35bc。
最后,我们在线程栈中,也就是上一步保存的那个 thread_stack.log 文件,在里面查找这个16进制的线程 id (0x35bc)。
相关阅读
-
清除手机垃圾的软件有哪些 能深度清理手机内存的软件推荐
正文核心介绍:清除手机垃圾的软件有哪些和能深度清理手机内存的软件推荐的介绍,一起来看看吧! 最近小雷发现了件怪事,新买不久的256GB安卓手机居然快没储存空间了!! 虽说小雷经常
-
tplink子网掩码是什么 tp路由器子网掩码是多少?
有网友在咨询: tplink子网掩码是什么 tp路由器子网掩码是多少? 下面IT袋小编就给大家解答下这个问题。 疑问解答: tplink路由器子网掩码是:255.255.255.0,默认的LAN IP地址(也就是电脑获取到
-
xbox series x和ps5配置 xbox series x和ps5怎么选择
相对于大多数人xbox series x和ps5怎么选择的话题,关于xbox series x和ps5怎么选择 以及 xbox series x和ps5配置,接下来一起来看看吧。 xbox series x号称新时代性能最强的游戏主机,不过它的性能其实和
-
小米路由器恢复出厂设置后怎么办 小米路由器恢复出厂设置后怎么重
关于小米路由器恢复出厂设置后怎么重新设置的电脑小知识,小米路由器恢复出厂设置后重新设置分为三步,在手机网络里设置好网络参数即可,具体操作步骤如下:


