今天在查看项目服务器的时候,发现cpu一直占用99%多,于是就有了这篇文章。。。

1、找到占用cpu高的进程

通过top命令来查看cpu占用高的进程有哪些,如图:

top


这里的pid代表的就是进程id

2、查看当前进程内占用cpu的线程

通过命令来查到线程的id,如下:

//这里的2970就是第一步查到的占用cpu高的进程id,大写H小写p
top -H -p  2970


这里的pid代表着线程id

3、使用jstack命令来查看堆栈信息

需要注意几点:

  • 登录用户必须是当前服务的用户
  • 线程id需要转换为16进制

使用命令如下:

// 2970是进程id,f05是线程id3845的十六进制表示
jstack 2970 |grep  f05 -A 30


看看第一个就是占用cpu的罪魁祸首:

com.midea.cdp.microservice.sdk.quene.SdkQueneManager

4、在项目里进行优化

  • 问题:
    我在项目里找见了这个类:很明显里面有一个死循环,一定是他的原因,但是这个包不在项目里,而是用的二方库的包,也就是说这个代码我根本没办法修改。

    public class SdkQueneManager implements Runnable, ApplicationListener<ContextRefreshedEvent> {private static final Logger log = LoggerFactory.getLogger(SdkQueneManager.class);@Resource(name = "link_quene")private BlockingQueue<SdkResult> bq;private IProjectAgentUdpService agentService;public SdkQueneManager() {}public void produce(SdkResult sr) throws InterruptedException {this.bq.put(sr);}public SdkResult consume() throws InterruptedException {return (SdkResult)this.bq.take();}public void run() {// 可以看到这里写了一个死循环while(true) {if (!this.bq.isEmpty()) {SdkResult sr = null;try {sr = this.consume();} catch (InterruptedException var3) {var3.printStackTrace();log.error(var3.getMessage(), var3);}this.agentService.submitResultQuene(sr);}}}public void onApplicationEvent(ContextRefreshedEvent event) {if (event.getApplicationContext().getParent() == null) {Thread t = new Thread(this);t.start();}}public void setAgentService(IProjectAgentUdpService agentService) {this.agentService = agentService;}
    }
    
  • 解决:
    既然不能修改,那我们利用类加载机制的双亲委派原理,在项目里创建一个一模一样的包和类,然后把死循环那一段注释调。通过尝试确实可以,问题得以解决。

cpu占用过高解决方案实践相关推荐

  1. mysql CPU占用过高解决方案

    问题描述 mysqld进程占用CPU资源过高,因为服务器是4核CPU,所以百分比会超过100% 解决办法 优化一下tmp_table_size show variables like '%tmp%'; ...

  2. Linux java进程CPU占用过高解决方案

    总目录 一.前言: 二.模拟java程序CPU过高 1 修改代码为死循环 2 部署在linux上 访问该接口 根据top命令查看CPU参数 3 通过ps命令查看这个程序的线程信息,tid代码线程ID, ...

  3. RadeonSoftware.exe CPU占用过高解决方案

    RadeonSoftware.exe是A卡驱动程序,部分开机自启,且占用高,导致游戏工作会卡顿. RadeonSoftware.exe启动原因大致分为bug,和有程序在使用,bug有添加Radeon ...

  4. 中柏 EZpad 8 Windows 平板电脑 |驱动备份|系统优化|不能调节显示器亮度|进入Bios/uefi 快捷键 |蓝牙扫描不到设备|CPU占用过高解决方案

    前言 之前一直使用的这个平板,但是有个很严重的问题就是性能实在太差了,每次都是CPU百分百,Mem 百分之50% 这个结果真的很意外, 但是又无可奈何,后面花时间做了一些优化包括 进程限制  启动优化 ...

  5. win10服务器cpu占用过高,完美解决:Win10资源管理器占用CPU过高

    Windows10资源管理器占用CPU过高该怎么办?因为Windows7系统结束了支持,所以现在很多朋友都升级更新了Windows10系统.在使用Win10系统的过程中,发现Windows资源管理器占 ...

  6. 接口压测时MySql对CPU占用过高

    记录MySql过多占用CPU资源的排查过程及解决方案 场景: 1.需要对项目的接口进行压力测试 2.大部分接口压测是正常的 3.只有部分接口压测时MySql对CPU的占用达到90%   压测: 压测线 ...

  7. 如何排查CPU占用过高以及常见的几种情况

    在最近上线过程中遇到cpu占用率过高问题 由于问题已解决,此时仅重现操作方法 1.先用top命令,找到cpu占用最高的进程 PID  如上图 2.再用ps -mp pid -o THREAD,tid, ...

  8. 服务和控制器应用CPU占用过高问题

    服务和控制器应用CPU占用过高问题 解决方案: 重启动 Windows Management Instrumentation 服务 这个治标不治本,只能解决当前开机至今的状态,下次开机问题仍然存在 不 ...

  9. 如何解决国标GB28181协议EasyGBS视频平台CPU占用过高的情况?

    CPU(中央处理器)作为计算机系统的运算和控制核心,是信息处理.程序运行的最终执行单元.之前我们解决过TSINGSEE青犀视频云边端架构中国标平台EasyGBS播放H265编码视频后CPU过高的问题( ...

最新文章

  1. 轻量级图卷积网络LightGCN介绍和构建推荐系统示例
  2. C#—使用InstallerProjects打包桌面应用程序
  3. JavaSE总结笔记
  4. 开放下载!复旦大学邱锡鹏教授发布教科书《神经网络与深度学习》
  5. Redis数据操作和与Python交互
  6. flutter 返回指定界面_Flutter页面路由导航及传参
  7. ADO.NETv2.0的一些特征
  8. SCADA之父:物理隔离没什么用
  9. 隋朝之前,扬州指的是现在的南京
  10. endnotex9安装后使用方法_endnotex9使用教程
  11. 硬石-专题04 步进电机控制(第1节)_步进电机基本知识介绍1
  12. MatConvNet训练自己的网络
  13. 浙江高院:引导当事人用区块链存取证据,微版权提供一站式知识产权保护服务
  14. OSChina 周四乱弹 ——一周五天在诈尸
  15. 用Ps将PSD切片并将切片保存为透明背景的图片
  16. android界面不显示,Android 可视化界面编辑器无法显示界面问题的终极解决方案
  17. linux(ubuntu16.04)下codeblock16.1 汉化
  18. 大数据量、高并发量网站解决方案
  19. Tomcat 自定义启动startup.bat文件
  20. android计步器使用环境,Android 计步器实现

热门文章

  1. python箭头符号怎么打_python – 用箭头标记matplotlib直方图bin
  2. Kubernetes亲和性学习笔记
  3. 余弦s=Acos(wt+φ)
  4. html整体垂直居中,实现HTML元素垂直居中的六种方法
  5. 深圳计算机发展好的地方,深圳和广州的哪个发达数据比较广州的繁荣还是深圳的繁荣?...
  6. 英语不好,可以进外企吗?
  7. 如何计算 NP(natural product likeness)和 BCT(Bertz complexity )?
  8. burpsuite配置证书抓取htpps
  9. 无法启动此程序,因为计算机丢失api-ms-win-crt-process-l1-1-0.dll
  10. OrgChart组织架构图控件