生產環境cpu飆高的原因
linux命令查看top -c
1.CAS修改值失敗,沒有控制自旋次數,導致一直自旋不斷重試,非常消耗cpu資源
2.雲服務器被黑客攻擊,植入了挖礦程序:端口不能夠被外網訪問
3.程序死循環:控制循環次數
4.服務器被DDOS攻擊:限流、ip黑名單、圖形驗證碼
cpu飆高如何排除
通過工具找到進程,再找到線程,根據線程再定位到業務代碼
使用到線程池創建線程的時候建議配置線程池名稱,方便后期可以定位到是哪個業務相關的線程
使用arthas排查cpu飆高問題
curl -O https://arthas.gitee.io/arthas-boot.jar
啟動
用java命令直接啟動
[root@localhost ~]# java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.3.3
[INFO] Can not find java process. Try to pass <pid> in command line.
Please select an available pid.
但是這里啟動失敗了,這是因為arthas在啟動時會檢測本機運行的jvm進程,然后讓用戶選擇需要綁定的進程,后面的操作都是針對選定的進程的。
這里我先啟動一個java應用,然后再啟動arthas。
[root@localhost ~]# java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.3.3
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 2467 jvm-0.0.1-SNAPSHOT.jar
下面就列出了本機正在運行的java進程,等待用戶輸入,這里輸入1選擇第一個進程然后回車。如果是第一次啟動需要下載一些必要的文件,等待下載完成即可。
[root@localhost arthas]# java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.3.3
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 2467 jvm-0.0.1-SNAPSHOT.jar
1
[INFO] arthas home: /usr/local/arthas
[INFO] Try to attach process 2467
[INFO] Attach process 2467 success.
[INFO] arthas-client connect 127.0.0.1 3658
,---. ,------. ,--------.,--. ,--. ,---. ,---.
/ O \ | .--. ''--. .--'| '--' | / O \ ' .-'
| .-. || '--'.' | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-' |
`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'
wiki https://alibaba.github.io/arthas
tutorials https://alibaba.github.io/arthas/arthas-tutorials
version 3.3.3
pid 2467
time 2020-06-22 03:02:31
查看cpu最高的三個線程
thread -n 3