Java 进程 CPU 占用过高问题排查
1. Java 进程 CPU 占用过高问题排查
1.1. 运行环境
| 操作系统 |
|---|
| Linux |
1.2. 定位 CPU 占用高的进程
top -c
1.3. 定位 CPU 占用高的线程
top -H -p 进程ID
1.4. 将线程 ID 转换为十六进制
printf '%x\n' 线程ID
1.5. 找到线程对应的栈信息
使用工具打印出线程栈信息,便能知道具体哪一行代码出现问题。
1.5.1. 使用 jstack
jstack 进程ID | grep -A 50 十六进制线程ID
1.5.2. 使用 jcmd
jcmd 进程ID Thread.print | grep -A 50 十六进制线程ID
1.5.3. 使用 arthas
Arthas 是阿里巴巴开源的的一款线上监控诊断产品,下载地址。
- 启动 Arthas:
java -jar arthas-boot.jar
- 定位 CPU 占用最高的 5 个线程:
thread -n 5
1.5.4. 使用 jattach
以上几种方法均基于 JDK,在只有 JRE 的情况下,可以使用 jattach 工具,下载地址。
jattach 进程ID jcmd Thread.print | grep -A 50 十六进制线程ID
或
jattach 进程ID threaddump | grep -A 50 十六进制线程ID
本文来自博客园,作者:Jason,转载请注明原文链接:https://www.cnblogs.com/jason207010/p/18215025
浙公网安备 33010602011771号