java线上问题定位_线上java.lang.OutOfMemoryError问题定位三板斧

OOM(OutOfMemoryError) 问题归根结底三点原因:

本身资源不够

申请的内存太多

资源耗尽

解决思路,换成Java服务分析,三个原因也可以解读为:

有可能是内存分配确实过小,而正常业务使用了大量内存

某一个对象被频繁申请,却没有释放,内存不断泄漏,导致内存耗尽

某一个资源被频繁申请,系统资源耗尽,例如:不断创建线程,不断发起网络连接

因此,针对解决思路,快速定位OOM问题的三板斧是:

确认是不是内存本身就分配过小

找到最耗内存的对象

确认是否是资源耗尽

以正式线上的tomcat为例,tomcat运行5个ssm架构的java项目,启动时需要60秒左右,运行一段时间偶尔会有OOM出现,现在逐一排查:

(1) 确认是不是内存本身就分配过小

在服务器(8核16G)上输入 top 查看 java启动时内存变化情况,顺便找到java的进程ID : 10397

99c16da1e514e2c42bba47184d8f56c4.png

然后, 输入:jmap -heap 10397,观察堆、新生代、老年代的内存使用情况,发现大概都用了一半,可以确定,不是内存分配过小问题。

wen@S189919:/opt/tomcat8$ jmap -heap 1246

Attaching to process ID 1246, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 24.65-b04

using thread-local object allocation.

Parallel GC with 8 thread(s)

Heap Configuration:

MinHeapFreeRatio = 0

MaxHeapFreeRatio = 100

MaxHeapSize = 4208984064 (4014.0MB)

NewSize 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值