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

相关文章

JAVA Calendar设置上个月时,日期不存在或错误提示问题及解决

《JAVACalendar设置上个月时,日期不存在或错误提示问题及解决》在使用Java的Calendar类设置上个月的日期时,如果遇到不存在的日期(如4月31日),默认会自动调整到下个月的相应日期(... 目录Java Calendar设置上个月时,日期不存在或错误提示java进行日期计算时如果出现不存在的

Mybatis对MySQL if 函数的不支持问题解读

《Mybatis对MySQLif函数的不支持问题解读》接手项目后,为了实现多租户功能,引入了Mybatis-plus,发现之前运行正常的SQL语句报错,原因是Mybatis不支持MySQL的if函... 目录MyBATis对mysql if 函数的不支持问题描述经过查询网上搜索资料找到原因解决方案总结Myb

Nginx错误拦截转发 error_page的问题解决

《Nginx错误拦截转发error_page的问题解决》Nginx通过配置错误页面和请求处理机制,可以在请求失败时展示自定义错误页面,提升用户体验,下面就来介绍一下Nginx错误拦截转发error_... 目录1. 准备自定义错误页面2. 配置 Nginx 错误页面基础配置示例:3. 关键配置说明4. 生效

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

python项目环境切换的几种实现方式

《python项目环境切换的几种实现方式》本文主要介绍了python项目环境切换的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 如何在不同python项目中,安装不同的依赖2. 如何切换到不同项目的工作空间3.创建项目