【HBZ】生产环境下如何解决CPU飙高 与排查CPU飙高问题 与如何解决内存泄漏

  • Post author:
  • Post category:其他




生产环境CPU飙高问题原因


0. CPU上运行的是线程, 所以就是说有线程一直在忙碌,一直在运行

  1. 线程中有CAS一直获取锁失败,并不断的通过自旋重试,这是CAS的缺点,因此大量线程在自旋重试,会空耗CPU。比如代码中运用了AtmicXXX这些原子类 或 ConcurrentHashMap 或 乐观锁重试这些东西都可能导致CPU飙高


    解决方案:使用这些原子类,或者乐观锁时要注意一下,并且自己写乐观锁自旋重试要注意配置重试次数
  2. 云服务器安装了Redis, 黑客利用6379端口注入挖矿程序,导致占用CPU资源


    解决方案:尽量不要让Redis在外网访问,不要暴漏ip,并把端口号 或 ip设置访问权限,所以云服务器尽量买一家的
  3. 服务端接口被DDOS恶意攻击,当然要做大量的DDOS攻击,要花大量的钱,不是深仇大恨一般不会


    解决方案:可以买高仿服务器,但是价格高。或者对接口做限流,图形验证码,ip黑名单等,对接口做限流可以防止服务器崩溃,但依然会把正常的良性请求也给拒绝了
  4. 代码出现了死循环打印,导致线程无法结束。


    解决方案:要合理做一些退出循环的操作, 比如做一些循环次数限制,或者循环时间限制



Windows如何去排查CPU是什么原因飙高

  1. 打开任务管理器 ctrl + alt + del
  2. 看一下cpu百分比最高的对应哪个进程

    在这里插入图片描述



Linux如何去排查CPU是什么原因飙高

  1. 通过命令top -c,找到占比高的进程id,即–>pid

    在这里插入图片描述
  2. 再根据进程pid去找具体哪个线程

  3. 注意:一定要配置【线程池名称】,否则很难找
  4. 更推荐使用Arthas(阿尔萨斯)这个工具
1. 下载方式:curl -O https://arthas.aliyun.com/arthas-boot.jar

2. 启动: java -jar arthas-boot.jar

3. 选择指定进程 启动arthas之后会自动列出所有jvm的java进程,前面有对应序号,输入对应序号, 然后回车 即可进入指定进程

4. 输入thread -n 3   回车   表示查看本进程占用CPU最高的3个线程



生产环境如何去排查CPU是什么原因飙高

  1. 服务器监控系统:比如阿里云CPU飙高的告警提示
  2. 运维先知道那台服务器节点CPU飙高,通知开发人员配合该服务器,进程中哪个线程导致cpu飙高
  3. 这些问题需要运维查,生产环境一般开发人员一定是碰不到的
  4. 或者通过第三方监控软件的平台查询。



版权声明:本文为a645293829原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。