生产环境发生 cpu 飙高的问题解决

2024-01-30 21:40

本文主要是介绍生产环境发生 cpu 飙高的问题解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

常见的cpu飙高原因:

  1. CAS 自旋一直重试导致 cpu 飙高 没有控制自旋次数;乐观锁
  2. 死循环;
  3. 云上 Redis 被注入挖矿程序,建议 Redis 端口不要能够被外网访问;
  4. 服务器被 DDOS 工具导致 cpu 飙高,可以通过限流、ip 黑名单、图形验证码防止机器模拟攻击。

由此我们知道在发生这类问题其解决关键就是找到发生cpu飙升的进程-->通过进程找到占用率最高的线程-->通过该线程找到对应的业务逻辑从而优化代码解决。固使用到线程池建议配置线程池名称方便后期维护。

首先我们先看看windows环境下的解决方法:

我们先运行一段测试代码模拟cpu飙高的问题场景

public class CeshiTest {public static void main(String[] args) {new Thread(() -> {while(true){System.out.println("跑代码中......");}},"thread-test-1").start();}
}

接着我们运行代码后打开任务管理器查看cpu使用率运行前后对比:

 前:

 后:

 我们发现cpu占用率明显飙升。随后我们打开jdk自带的一款性能分析和故障排除工具jvisualvm

工具路径在jdk安装路径下的(C:\Program Files\Java\jdk1.8.0_162\bin\jvisualvm.exe)

打开后找到我们运行的进程:

 接着在找到该进程的抽样器中查看cpu使用时间占比最高的线程

 我们很快找到了问题的根源之后再去查看该线程对应的业务逻辑即可

我们再看看再linux环境下如何排查

 首先我们再linux中启动刚刚的测试代码

然后执行命令 top -c 在服务器上cpu占用较高的进程:

一研就找到了我们运行的测试代码进程,之后在对这一进程进行进一步排查,在这之前先介绍一款一款线上监控诊断工具Arthas(阿尔萨斯)

我们先通过命令下载该工具jar包在将jar启动起来:

curl -O https://arthas.aliyun.com/arthas-boot.jarjava -jar arthas-boot.jar

 

 此时让我们选择要监控的进程,因为我们查到【2】出现问题,所以选择监控【2】就好了

 看到这代表启动成功并且监控我们正在运行的进程

然后我们在通过指令 thread -n 5 查看线程中cpu占用最多的5条线程:

 由此我们也定位到了问题所在。

分析思路:

  1. 查看当前的操作系统中(top) 那个进程 cpu 使用率是最高的;
  2. 找到该操作系统中 最高使用率 进程 分析该进程里面具体线程 谁 cpu 使用率是最高 的
  3. 在根据线程名称 搜索“java 代码” 找到具体发生 cpu 飙高的代码 工具:使用 jvisualvmq.exe或者Arthas 工具

 注意:在企业真实环境中一般都会为自家项目开发一个服务器监控系统,并为服务器cup占用设置一个阈值(70%—85%),超过阈值就会报警通知运维人员,运维人员在查找到cpu飙升的服务器节点通知开发人员排查问题以防止挂掉。

这篇关于生产环境发生 cpu 飙高的问题解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/661638

相关文章

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖