linux运行java程序内存过大_排查java应用linux环境内存占用过高的问题

一、问题场景

在一个短信平台的项目中,设置了一个下发节点的Xmx为16G,但是出现了内存撑满,导致CPU过高的情况。当时的具体情况是,该应用内存占用16G,该应用CPU占用1400%(16核),服务器负载15左右。进入应用的实时日志,发现日志每打印四五秒后,会暂停一分多钟。这代表着由于内存耗尽,导致cpu高负载,最终导致应用程序不能正常运行,断断续续。严重影响生产环境的运行速率。

二、解决方案

1、线上救急的临时方案:

(1)让运营停止审核,即停止继续往堵塞应用中送数据。

内存队列中的数据让它慢慢下放,经过几个小时的下放后,断断续续由每次四五秒到十几秒最终到几十秒,当内存队列中的数据全部清空后,断断续续仍然存在,但是要好了很多,基本是正常半分钟,暂停半分钟。这时候内存占用仍然没有明显的下降。

(2)重启服务,内存当即释放掉,所有问题得到了临时解决。

(3)将应用的Xmx由16G调高到52G,服务器是64G内存的。

(4)时刻关注这台服务器的内存cpu占用,每晚凌晨重启。

(1)输入命令:top -c,查看占用内存过高的进程信息

(2)输入命令:jmap -histo:live PID > xxx.log,vim查看内存中的存活对象统计,找出业务相关的类名

(3)如果第(2)步仍然不能定位到代码中的具体对象,输入命令:jmap -dump:live,format=b,file=xxx.hprof PID

这个命令会将内存里的所有信息都输出&

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值