Arthas查询容器内什么代码导致docker容器cpu飙升
Arthas 是一款阿里巴巴开源的线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率
这里演示cpu都正常状态,假设某一个49e32eb8a88a的cpu飙升120且持续不下降。
进入飙升的容器
docker exec -it ID sh
下载arthas
wget https://arthas.aliyun.com/arthas-boot.jar
输入ps查询java PID
PID USER TIME COMMAND
1 root 6:17 java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 /application.jar -Xmx1900m -Xms1900m -Xmn420m -XX:MetaspaceSize=240m -XX:MaxMetaspaceSize=240m -XX:+UseConc
8072 root 0:00 sh
8083 root 0:00 ps
查询到java PID 是 1,将下面的第一行PID替换成java PID 1并输入。
pid=PID;\
touch /proc/${pid}/cwd/.attach_pid${pid} && \
kill -SIGQUIT ${pid} && \
sleep 2 &&
ls /proc/${pid}/root/tmp/.java_pid${pid}
然后启用arthas
java -jar arthas-boot.jar
结尾* [1],直接输入一个1会打印下面信息,进入arthas
1
[INFO] arthas home: /root/.arthas/lib/3.6.7/arthas
[INFO] Try to attach process 1
Picked up JAVA_TOOL_OPTIONS:
[INFO] Attach process 1 success.
[INFO] arthas-client connect 127.0.0.1 3658
,---. ,------. ,--------.,--. ,--. ,---. ,---.
/ O \ | .--. ''--. .--'| '--' | / O \ ' .-'
| .-. || '--'.' | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-' |
`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'
wiki https://arthas.aliyun.com/doc
tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html
version 3.6.7
main_class
pid 1
time 2023-03-08 15:48:02
使用thread命令 ,查看当前线程信息,查看线程的堆栈
thread -n 个数 ,指定最忙的前 N 个线程并打印堆栈
这里是正常资源下演示的,所以最高的才0.39%。
评论区