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

一 后台服务器问题排查步骤
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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值