cpu占用过高解决方案实践

2023-05-16

今天在查看项目服务器的时候,发现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;
        }
    }
    
  • 解决:
    既然不能修改,那我们利用类加载机制的双亲委派原理,在项目里创建一个一模一样的包和类,然后把死循环那一段注释调。通过尝试确实可以,问题得以解决。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cpu占用过高解决方案实践 的相关文章

  • 聊聊 Redis 为什么构建自己的简单动态字符串 SDS

    我们知道 xff0c Redis 支持字符串 哈希 列表 集合和有序集合五种基本类型 那么我们如何把图片 音频 视频或者压缩文件等二进制数据保存到 Redis 中呢 xff1f 之前在使用 Memcached 缓存这类数据时是把它们转换成
  • 聊聊 Redis 高可用之持久化AOF和RDB分析

    Redis 持久化概述 Redis 是内存数据库 xff0c 数据都是存储在内存中 xff0c 为了避免进程退出导致数据的永久丢失 xff0c 需要定期将 Redis 中的数据以某种形式把内存中的数据保存到磁盘中 xff1b 当 Redis
  • mysqldump: Got error: 1044: Access denied for user XXXX when doing LOCK TABLES

    一 报错信息 在使用mysqldump 执行远程备份数据库的时候报如下错误 xff1a mysqldump Got error span class token number 1044 span Access denied span cla
  • jmap -heap [pid]运行报:Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException(不允许的操作)

    一 运行环境 操作系统 xff1a Ubuntu 5 4 0 6 Java版本 xff1a JDK8 二 执行命令 jmap heap span class token punctuation span pid号 span class to
  • chkconfig: command not found

    问题描述 在 ubuntu1 16 04 10 执行 chkconfig 命令报 chkconfig command not found 说明此服务上没有安装 chkconfig 执行如下命令进行安装 span class token fu
  • Docker 基础篇 之 安装

    一 Docker安装 查看 CentOS 内核版本 Docker 要求 CentOS 系统的内核版本高于3 10 执行如下命令查询 内核版本 span class token function uname span r span class
  • Java 基础 之 Valid 验证

    一 64 Valid 简介 Bean Validation 内置的校验器 校验器说明 64 Null被注解的元素必须为 null 64 NotNull被注解的元素必须不为 null 64 AssertTrue被注解的元素必须为 true 6
  • HttpURLConnection链接详解

    HttpURLConnection链接详解 一 简介 简单来说 xff0c HttpURLConnection 是 Java 提供的发起 HTTP 请求的基础类库 xff0c 提供了 HTTP 请求的基本功能 xff0c 不过封装的比较少
  • Apache HttpClient 详解

    1 简介 HttpClient 是 Apache Jakarta Common 下的子项目 xff0c 用来提供高效的 最新的 功能丰富的支持 HTTP 协议的客户端编程工具包 xff0c 并且它支持 HTTP 协议最新的版本和建议 Htt
  • OKHttp使用详解

    1 简介 OkHttp 是一个默认高效的 HTTP 客户端 xff1a HTTP 2 支持允许对同一主机的所有请求共享一个套接字 连接池减少了请求延迟 xff08 如果 HTTP 2 不可用 xff09 透明 GZIP 缩小了下载大小 响应
  • python二维码生成与扫码

    1 import qrcode img 61 qrcode make 34 hello world 34 img get image show img save 39 hello png 39 2 import qrcode qr 61 q
  • C语言可变参数(从stdarg.h到应用)

    1 什么是可变参数函数 在C语言编程中有时会遇到一些参数可变的函数 xff0c 例如printf scanf xff0c 其函数原型为 xff1a span class token keyword int span span class t
  • OkHttp 缓存实战

    1 简介 在实际业务中可能某些查询数据 xff0c 不经常变化 xff0c 为了节省流量 提高响应速度和增强用户体验等 xff0c 把变化频率小的数据缓存到本地 xff0c 以实现复用 OkHttp 的缓存功能使用起来也比较简单和灵活 xf
  • Feign 详解

    1 Feign 是什么 Feign是一个http请求调用的轻量级框架 xff0c 可以以Java接口注解的方式调用Http请求 Feign通过处理注解 xff0c 将请求模板化 xff0c 当实际调用的时候 xff0c 传入参数 xff0c
  • @Transactional 注解失效情况及解决办法

    一 64 Transactional 注解在了非 public 方法上 如下所示 64 Transactional修饰在了非public方法上 span class token annotation punctuation 64 Servi
  • @Transactional 事务加了 锁 为什么还有并发问题?

    一 原因分析 Spring 中通过在方法上添加注解 64 Transactional 可以很好的处理事务问题 Spring对此的处理原理是对 加了 64 Transactional 注解的方法 添加 AOP切面来时先事务管理的 而 sync
  • 聊聊微服务之什么是微服务及其好处

    一 什么是微服务 微服务就是一些协同工作的小而自治的服务 很小 xff0c 专注于做好一件事 在单一模块系统中 xff0c 随着新功能的增加 xff0c 代码库会越来越大 时间久了代码库会变得非常庞大 xff0c 以至于在什么地方修改都很困
  • RestTemplate 使用详解

    一 简介 常见的http客户端请求工具 xff1a JDK 自带 HttpURLConnectionApache HttpClientOKHttp 以上 工具虽然常用 xff0c 但对于 RESTful 操作相对不是太友好 所以 xff0c
  • BigDecimal 你使用对了吗

    背景 从事金融相关项目 xff0c 对BigDecimal应该是再熟悉不过了 xff0c 也有很多人因为不知道 不了解或使用不当导致资损事件发生 所以 xff0c 如果你从事金融相关项目 xff0c 或者你的项目中涉及到金额的计算 xff0
  • MySQL 中截取字符串的方法

    LEFT str len 从左边开始截取 xff0c 如果字符串为 null 则返回null str xff1a 被截取字符串 xff1b len xff1a 截取长度 span class token keyword SELECT spa

随机推荐

  • Redis 阻塞原因

    Redis 是典型的单线程架构 xff0c 所有的读写操作都是在一条主线程中完成的 当Redis用于高并发场景时 xff0c 这条线程就变的极其重要 如果它出现阻塞 xff0c 就会对应用带来致命的问题 当 Redis 出现阻塞时 xff0
  • 【pcl入门教程系列】之点云Concatenate

    简要说明 点云拼接 Concatenate 是指将点云进行累加在一起 xff0c 只是累加的方式不太一样 一种是点云的字段与维度完全一致 xff0c 数量可以不同 xff0c 两部分点云相加 xff0c 点云的数量增加了 另一种是点云的字段
  • python多线程

    单线程 from time import ctime sleep def music for i in range 2 print 34 I was listening to music s 34 ctime sleep 1 def mov
  • Nginx下配置Https证书详细过程

    一 Http与Https的区别 HTTP xff1a 是互联网上应用最为广泛的一种网络协议 xff0c 是一个客户端和服务器端请求和应答的标准 xff08 TCP xff09 xff0c 用于从WWW服务器传输超文本到本地浏览器的传输协议
  • SLAM学习记录:全局定位之gps说明

    这段时间因为各种事情耽误了 xff0c 好久没有进行更新了 xff0c 惭愧 xff01 前段时间在研究cartographer的定位建图模块 xff0c 在停更的时间主要再研究如何改善定位建图的效果 xff0c 也有一定的成效 xff0c
  • Windows操作系统名称与版本号汇总

    查看Windows系统版本号 xff1a 1 cmd xff1a winver 2 cmd xff1a systeminfo findstr Build 3 运行 xff1a dxdiag xff0c 可查看D3D版本 Windows操作系
  • 使用Onos+Ovs+Docker+Veth建立拓扑(2)

    使用Onos 43 Ovs 43 Docker 43 Veth建立拓扑 xff08 2 xff09 说明 首先在宿主机上安装一个带内核模块的ovs xff0c 然后在docker中安装一个不带内核的 这句话非常重要 可能存在的问题 Dock
  • 子网掩码 与同一网段

    子网掩码是必填的 子网掩码的作用 xff0c 通俗一点就是 就是用来分割子网和区分那些ip是同一个网段的 xff0c 那些不是同一网段的 以前以为ip地址的第三组数字就是网段 xff0c 其实大错特错了 其实同一网段指的是IP地址和子网掩码
  • 【人脸检测】OpenCV中的Haar+Adaboost级联分类器分解(一):Haar特征介绍

    最近由于工作原因 xff0c 需要研究OpenCV中的Adaboost级联分类器 我阅读了OpenCV中所有相关得代码 xff0c 包括检测和训练部分 xff0c 发现目前OpenCV中的Adaboost级联分类器代码有以下2个特点 xff
  • 认识 UML 类关系——依赖、关联、聚合、组合、泛化

    文章目录 1 依赖 xff08 Dependency xff09 2 关联 xff08 Association xff09 3 聚合 xff08 Aggregation xff09 4 组合 xff08 复合 xff0c Compositi
  • 常用开发软件及网站

    常用开发软件及网站 点击查看
  • 电商模式术语:ABC、B2B、B2C、C2C、B2M、M2C、B2A、C2A、O2O

    电商模式分类详解 一 ABC 英文单词 xff1a Agent xff08 代理商 xff09 Business xff08 商家 xff09 Consumer xff08 消费者 xff09 ABC 模式是新型电子商务模式的一种 xff0
  • TkMapper(通用mapper)

    TkMapper的配置及使用 TkMapper主要是做单标查询 xff0c 复杂的多表查询我们还得自己写sql 官方文档 xff1a 点击查看使用的是Springboot框架使用的数据库表ums permision xff1a idpidn
  • python两个 list 获取交集,并集,差集的方法

    1 获取两个list 的交集 方法一 a 61 2 3 4 5 b 61 2 5 8 tmp 61 val for val in a if val in b 列表推导式求的两个列表的交集 print tmp 2 5 方法二 print li
  • 报错:EL1007E: Property or field 'name' cannot be found on null

    SpringBoot集成thymeleaf做开发遇到的错误 Caused by org springframework expression spel SpelEvaluationException EL1007E Property or
  • Docker-1.0>>>>>>初阶学习

    文章目录 Docker学习总结一 Docker的安装 xff1a 二 Docker常用命令1 帮助命令 xff1a 2 镜像命令 xff1a 3 容器命令 xff1a 三 镜像详解四 容器数据卷 xff08 持久化 xff0c 数据共享 x
  • 报错:iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000

    Docker启动容器报错 docker Error response from daemon driver failed programming external connectivity on endpoint myrabbit 详细信息
  • 报错:yum install 安装时报yum doesn't have enough cached data to continue

    yum install 安装时报错 One of the configured repositories failed 未知 and yum doesn t have enough cached data to continue At th
  • Logback和Log4j详解

    文章目录 日志框架前言 一 日志简介1 什么是日志 xff1f 2 日志的用途 xff1f 二 常用的日志框架1 日志门面2 logback xff08 更快的执行速度使其成为主流 xff09 2 1 引入依赖2 2 编写xml文件2 3
  • cpu占用过高解决方案实践

    今天在查看项目服务器的时候 xff0c 发现cpu一直占用99 多 xff0c 于是就有了这篇文章 1 找到占用cpu高的进程 通过top命令来查看cpu占用高的进程有哪些 xff0c 如图 xff1a top 这里的pid代表的就是进程i