首页 > 其他分享 >CPU 100%问题排查

CPU 100%问题排查

时间:2023-10-30 10:57:47浏览次数:37  
标签:文件 mat dump 100% eclipse hprof 排查 CPU

引用:

https://blog.csdn.net/qq_37515544/article/details/123921604

https://blog.csdn.net/yujing1314/article/details/114524668

 

一、定位哪个程序占用的CPU较高
linux命令:top

 

 

 

 

二、jstack使用
2.1 栈信息输出
命令格式:jstack pid > 文件信息
eg:jstack 5115 > a.txt

2.2、线程ID转为16进制,访问转换地址
将子线程TID的5158做进制转换为16进制:1426

2.3、通过16进制的线程ID在栈信息中查找定位代码行




三、jmap 工具
3.1 生成 hprof文件
以下两个命令都可生成hprof文件

命令1:jmap -dump:file=/data/dump/jvm_en.hprof 20176
命令2:jmap -dump:live,format=b,file=m.hprof PID

 

四、MAT工具(linux)
在线解析dump文件,然后会生成三个zip文件

4.1 下载工具
http://www.eclipse.org/mat/downloads.php

4.2 查看服务器版本
在linux服务器执行命令 uname –m查看版本


下载完成后直接 上传MAT到服务器后解压

4.3 配置MAT
修改MAT的内存大小, 注意这个大小要根据你dump文件大小来的,如果dump文件是5GB那么 这里最好配>5GB 否则会报MAT内存不足的异常


4.4 执行分析
执行命令

./ParseHeapDump.sh m.hprof org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components
注释:
m.hprof:就是jvm的dump文件。
在mat目录下会生成3份.zip结尾的报告和一些m.相关的文件,将生成的m.hprof相关的文件都下载到windows本地磁盘。

以上命令执行完成后会在 m.info所在目录中生成三个文件,下载下来本地浏览器打开
jmap_Leak_Suspects.zip
jmap_System_Overview.zip
jmap_Top_Components.zip


4.5 下载后在浏览器查看分析报告

查看Class Histogram一项

发现其中一个类对象占用了7个G,这里的Heap单位都是Byte,自行换算。
Shallow Heap 既对象本身的大小
Retained Heap 对象自身加起直接或间接引用的大小

也可以使用使用eclipse的mat工具:

Eclipse需要按照mat工具,安装步骤可以百度,或者参考
https://jingyan.baidu.com/article/cb5d61053562ed005c2fe022.html
如果直接打开dump文件还是会内存溢出,所以可以使用eclipse打开分析报告即可。

4.6 注意:
执行命令后,可能会出现版本问题

下载mat对应jdk的版本解决此问题。
此处使用的是:jdk1.8、mat使用的是 MemoryAnalyzer-1.10.0.20200225-linux.gtk.x86_64.zip

 

五、jvisualvm工具(jdk自带)
如果dump比较小可以直接下载下来同步哦此工具查看

下载dump后,载入到此工具就可以查看了

 

六、CPU飙升问题产生的背景
1、代码中存在死循环
2、定时任务跑批量
3、tomcat高并发项目的时候,所有线程都处在运行状态,消耗CPU资源
4、Redis的端口6379被注入挖矿程序
5、分布式锁的重试机制
a、乐观锁:能够保证用户线程一直在用户态,缺点是消耗CPU的资源
b、CAS自旋锁

七、如何避免CPU飙升问题
1、检查代码的死循环情况
2、定时任务项目要喝业务逻辑项目分开部署
a、降低业务逻辑项目CPU资源消耗
b、更好实现定时分片执行
3、接口比较耗时的代码不要写成同步,改为使用mq
4、对服务器接口实现限流、熔断和降级
5、端口号不要随意放开,要结合nginx、LVS等
6、写自旋锁一定要控制死循环次数
tips:预警系统很重要

部分内容,来源于其他大神,感谢各位大神的指点。
————————————————
版权声明:本文为CSDN博主「麦兜*」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37515544/article/details/123921604

标签:文件,mat,dump,100%,eclipse,hprof,排查,CPU
From: https://www.cnblogs.com/myf008/p/17797258.html

相关文章

  • 海康设备通过EHMOE协议无法上线问题排查
    海康通过EHOME协议不上线问题的解决策略一、问题描述在某些情况下,海康设备可能无法通过EHOME协议上线,这可能对监控系统的正常运行造成严重影响。为了解决这个问题,我们需要仔细检查设备的配置和网络环境,以确定问题的根本原因。二、可能的原因及解决方法网络配置问题海康设备无......
  • 记一次云服务器 CPU 爆满原因—被 kdevtmpfsi 挖矿病毒入侵
    目录1.问题表现2.问题解决1.问题表现突然发现云主机的CPU使用率爆满了,我寻思着我也没干啥啊,不会中病毒了吧看了下docker中的容器,多了很多不知道哪里来的东西把容器和镜像统统删光后,短暂的恢复了一下,但过一阵子,CPU又爆满了用top命令查看了自己服务器CPU运行情况......
  • 超全面!23年秋招1000+道Android中大厂面试题集锦(含答案)
    前言整理这些面试题源于在微信群和几个刚入职的小伙伴们的一次讨论,很多小伙伴谈了自己的面试经历和体会,很多人最初鄙视刷题党,觉得开发技能最重要,但在短暂的面试过程中很挫败。转而去看面试题,但是网上面试题太多但又不全,查找很不方便,多是看过的又看,看十道才能看到面试的题目,极大的浪......
  • PAT_B1008 数组元素循环右移问题
    一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0​A1​⋯AN−1​)变换为(AN−M​⋯AN−1​A0​A1​⋯AN−M−1​)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式:每......
  • 20231005比赛
    T14883.灵知的太阳信仰Description在炽热的核熔炉中,居住着一位少女,名为灵乌路空。据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量——核能。核焰,可融真金。咳咳。每次核融的时候,空都会选取一些原子,排成一列。然后,她会将原子序列分成一些段,并将每段进行一次......
  • win10怎么查看CPU多核占用率(转)
    原文:https://blog.csdn.net/weixin_44217936/article/details/119185905作者:想躺平的小陈 打开任务管理器——性能——CPU 如下图所示的是CPU总体利用率 查看每个cpu的利用率,右击旁边的折线图 (有几个图就代表CPU是几核的,如下图是12核的) ......
  • PCB封装命名规则,本文转载https://www.xjx100.cn/news/432127.html?action=onClick
    SO、SOP、SOIC、MSOP、TSSOP、TSOP、VSSOP、SSOP、SOJ封装详解 1. 简要信息如下: 2.SOP和SOIC的规格多是类似的,现在大多数厂商基本都采用的是SOIC的描述:SOIC8有窄体150mil的(外形封装宽度,不含管脚,下同),管脚间距是1.27mm,如下:有宽体的208mil的,管脚间距是1.27mm,如下:......
  • 记一次 Redisson 线上问题 → ERR unknown command 'WAIT' 的排查与分析
    开心一刻昨晚和一个朋友聊天我:处对象吗,咱俩试试?朋友:我有对象我:我不信,有对象不公开?朋友:不好公开,我当的小三问题背景程序在生产环境稳定的跑着jarjar自己在开发环境也做了主流业务的测试,没有任何异常,稳如老狗提测之后,测试小姐姐也没测出问题,一切都是......
  • LightDB-ETL迁移工具常用问题排查
    1、无法删除约束根据以下SQL查询oracle目标库,如果约束名称包含小写字母,则迁移工具无法删除,它默认是按照大写处理的。SELECTac1.constraint_name,DBMS_METADATA.get_ddl('REF_CONSTRAINT',ac1.constraint_name,ac1.owner)FROMall_constraintsac1JOINall......
  • 服务器常见问题排查(一)——cpu占用高、上下文频繁切换、频繁GC
    一般而言cpu异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用jstack来分析对应的堆栈情况。使用jstack排查占用率问题当使用jstack排查占用率问题时,可以按照以下步骤进行:首先,使用......