生产环境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