记一次服务器CPU高,内存高的解决

拼搏现实的明天。 2022-12-27 08:24 307阅读 0赞

一 后台服务器问题排查步骤
java后台服务故障排除网络与硬件故障外;可能出现以下问题:
1),CPU过高:例如gc频繁,代码循环逻辑,高并发;
2),内存过高:例如频繁创建对象,内存泄露等这里会有俩种情况,一种报oom,一种导致系统卡,访问等待.
3),IO过高:例如持续磁盘读写,这种情况目前还没有发生过;
4), 硬盘空间满了,这种情况一般系统访问不了;好排查;
针对以上情况我们有以下定位问题步骤
二 cpu过高
CPU过高一般是有gc频繁或代码里有循环逻辑导致;
第一步: top命令定位进程确认是哪个进程耗cpu
输入top
按P – 以 CPU 占用率大小的顺序排列进程列表
按M – 以内存占用率大小的顺序排列进程列表
第二步:查找具体的线程
ps -mp 《PID》-o THREAD,tid,time | sort -rn

第三步: jstat 判断是否gc频繁
jstat -gc PID

第四步: jstack打印线程堆信息
jstack PID
jstack PID| grep $(printf “%x\n” TID) -A 10

如果是gc频繁 看jvm 内存分配大小是否合理,是否需要重新分配大小
大小合理,新生代老年的gc比例合理吗?不合理,看gc后内存是否有释放,没有,内存泄露或线程过多 导内存dump分析对象数量大小,系统上限流;
Jmap -heap PID 看内存分配情况

Jmap -dump:format=b,file=/usr/x.dump PID必要时可以导出内存文件分析
第三步 jstat PID判断是否循环逻辑导致
打印JVM里全部线程状态,观察线程状态,活跃线程的执行系统内容;
二 内存过高
第一步 定位耗内存线程 一般是Java项目线程,病毒(挖矿程序)
Top

第二步 分析JVM内存分布,各个代使用率情况,gc回收情况,可能分布不合理;
jstat -gc PID
查看堆内存使用情况
jmap -heap 71614
jmap -heap 进程号

第三步 导出dump;使用分析工具分析对象
jmap -dump:live,format=b,file=dump.hprof PID

发表评论

表情:
评论列表 (有 0 条评论,307人围观)

还没有评论,来说两句吧...

相关阅读

    相关 项目运行cpu处理

    第一次处理这种问题,新手不懂的从何下手走了不少弯路,记录一下,以后借鉴. 对于cpu运行过高的问题,首先要打印堆栈信息,和线程运行cpu使用情况:    1.打印堆栈信息:

    相关 服务cpu异常

    ![image][] 这几天进行架构整改,将业务服务话,然后单独部署,但是有一台服务的运行时,cpu特别高,基本都是90%以上,导致服务的消费能力特别差。这种级别bug,简直