4

线上 JVM 内存溢出, OOM 问题排查求指点。

 2 years ago
source link: https://www.v2ex.com/t/868151
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  Java

线上 JVM 内存溢出, OOM 问题排查求指点。

  jiobanma · banmajio · 3 小时 56 分钟前 · 648 次点击

如题,线上有个服务跑着跑着就会 OOM ,导致所有请求失败,内存无法回收。

1. 报错信息

java.lang.OutOfMemoryError: GC overhead limit exceeded
Dumping heap to /xxx/xxx/bootstrap/java_pid39726.hprof ...

2. 排查过程

2.1 JVM 参数

JVM 参数

2.2 分析 dump 文件

用 VisualVM 分析 dump 文件发现,有个大对象占用了 33%的内存,如图①,查看该对象,发现里面大概有 200w 个对象,有一部分是空的,最大的几个对象就是顶部的那四五个。这些对象是一个 JSON 字符串,最上面几个大对象排查发现其中的 url 部分有大量重复,可能是前端提交数据或者后端处理 url 拼接的时候循环有问题,导致有大量重复的 url 使得其中这个对象特别的大。排查数据库,length 这个字段,最大的几个分别占用 9469799 ,4764368 ,4725799 ,4571257 。

JVM 参数

JVM 调优经验较少,不知道是不是这么个排查流程,也不知道排查的点对不对。希望有经验的大佬给点指导。 补充几点:

  1. 目前准备先把数据库里的重复的 url 干掉,但是应该解决不了实际问题,最大的几个对象加起来也就不到 100m 。
  2. 估计是哪里的接口或者操作触发了大批量的查询,导致数据都压到了内存中。先排查下代码,看看哪里有批量查询的地方,然后加一些范围条件。

第 1 条附言  ·  几秒前

![在这里插入图片描述]( https://gitee.com/banmajio/my-picgo/raw/master/img/28A82E22D670D70B0ABF999583E9D0B7.png)

补充一张 MAT 的 dump 截图。查过代码了,应该没有报表类的接口大批量数据的查询,不知道是不是连接池的问题

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK