Skip to content

DBLE cpu 高负载时排查手段 #2950

Answered by PanternBao
PanternBao asked this question in Q&A
Discussion options

You must be logged in to vote

排查步骤

  1. 执行 top 命令,查看按系统CPU的排序所有进程。极大可能排第一个的就是java进程(COMMAND列),PID那一列就是进程号

top

  1. 查看java进程下的所有线程占CPU的情况

top -Hp {进程号}

  1. 执行命令将步骤2找到的高cpu使用率的线程的pid转换成十六进制,jstack中线程堆栈信息展示的pid是十六进制,便于查找

printf "%x\n" {线程ID}

  1. 打印当前java进程的线程堆栈,最好每隔2min打印一次,打印三次。文件中的 nid 对应的是步骤3中线程号

jstack -l 进程号 > /tmp/jstack1.log

  1. 从堆栈文件中找到具体线程的堆栈

grep "十六进制线程ID" /tmp/jstack1.log

  1. 到此可以找到此线程的堆栈,具体的jstack文件可交由dble官方分析

可能原因

1. gc 导致cpu高负载

若通过上面排查出来的是gc线程占用cpu比较高
可以参考:OOM 排查方式 进一步排查

2. 代码问题导致的高负载

联系dble官方并提供堆栈文件,dble日志

Replies: 1 comment

Comment options

PanternBao
Nov 26, 2021
Collaborator Author

You must be logged in to vote
0 replies
Answer selected by yanhuqing666
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
1 participant