Linux服务器cpu过高,代码问题导致内存泄漏,如何定位

1、问题描述

Linux服务器cpu过高,修改堆内存配置也无法解决,日志仍在报错ORA-12155

2、问题分析及处理

        这次问题出现真的是踩了很多坑折腾许久,原因还是不怎么会分析JVM内存,不会进行问题定位。中间还更换了一台应用服务器,又修改服务器的性能参数,终未解决。在排查了应用服务器和数据库配置无误后,木有办法了,请教大佬同事,最终经过一番排查后定位到有问题的那段代码,反馈给开发,开发最终确定是数据库表数据过多引起的,将数据删除后,压测通过,这个问题才算成功解决。

        事后多方查找资料及验证,总结这类问题的定位方法。显然,这是个内存泄漏的问题,但因CPU刚开始异常就查看日志,此时内存还未溢出,所以并未抛出Out Of Memory的异常,程序再运行一段时间,就会内存溢出了。问题定位步骤如下:

        1)top命令 实时监控CPU占用情况,当CPU慢慢升高逐渐异常之前,打印此时的堆使用情况和jstack日志;

        2)Jmap -heap 进程号 打印堆使用情况,如图:

                                                          图1 堆使用情况

连续快速多打印几次,发现都是这种结果,说明Eden区对象未经过YGC,直接晋升到Old区了,说明很可能存在内存泄漏。也可使用jstat -gcutil PID 2000 1000 打印出实时GC统计信息,如图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值