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

相关文章

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型: