线上 OutOfMemoryError 了,没头绪... ...

2020 年 5 月 7 日
 Solace202

这是我第一次碰到 OOM,我不理解的是为什么我看 jvm.heap 里面,堆内存使用率不是百分百,但请求依然是 OOM 呢?这些堆栈文件是运维用脚本生成的,必要的话我可以把脚本贴上来。

我会继续排查问题,希望哪位看到了也能帮我瞅瞅,非常感谢。

8020 次点击
所在节点    Java
47 条回复
Solace202
2020 年 5 月 7 日
@limbo0 凌晨一般产品就没人使用了,只是凌晨一般会议很多定时任务开始执行
25OHd2qObJmJ6P10
2020 年 5 月 7 日
从应用日志来看是 spring 注入一个类的时候报了堆空间不足,spring 注入属性会去加载相应的类到永久区,根据你的日志分析,你的 jdk 应该是 1.8 以下,而且你的 jvm 内存空间也显示你的永久区只有 24M,使用达到 99%,所以初步分析就可以增大永久区 -XX:PermSize=75M -XX:MaxPermSize=100M 尝试,然后再根据 jstat 和 jmap 分析内存变化,确定原因以及调整最合适的 jvm 参数
Solace202
2020 年 5 月 7 日
@rayduan 我是有个地方不理解,两个 GC,为什么注入的类会放到下面这个 GC 的 Perm Generation 而不是上面的那个 Perm Generation ?
zwx327634
2020 年 5 月 7 日
如果是 jdk1.7,升到 1.8 就没问题了,永久代变成元空间,放在堆里了。快速的话就是像楼上,增加永久代空间
Solace202
2020 年 5 月 7 日
@zwx327634 jdk1.6,瑟瑟发抖,老项目快十年了
1ffree
2020 年 5 月 7 日
好奇应用运行期间 还有 autowire 是啥使用场景呢
pangleon
2020 年 5 月 7 日
你这个提示的是 heap space 而不是 permgen space,后者是永久代满了,那么基本上可以定位到你们的程序创建了大量的临时对象

如果真是凌晨 OOM,凌晨也不是用户高峰那么基本可以确定是定时任务导致的。
你可以查询下有哪些定时任务在运行,他们是否创建了大量的 LIST,MAP 这种集合类对象或者拼接了大量字符串对象。
pmispig
2020 年 5 月 7 日
@Solace202 -XX:HeapDumpPath=/logs/gc.hprof 看看能不能重现一次,拿到这个 dump 出来分析就比较好定位
liukzz
2020 年 5 月 7 日
https://gceasy.io/gc-index.jsp 这个网站下个离线版的分析工具,把 gc.log 导进去分析下
Solace202
2020 年 5 月 7 日
@pmispig 嗯,已经在 jvm 加了,今晚要是再出现就好处理了。
gadsavesme
2020 年 5 月 7 日
Perm Generation 满了,这个 jdk1.8 以下的时候 fullgc 的时候不会清理空间,满了就 oom 十分蛋疼。
bonke
2020 年 5 月 7 日
hashMap 的 key 是重写了 hashCode 方法么 看下有没有重写 equals 方法
admol
2020 年 5 月 7 日
推荐一下这个工具 https://console.perfma.com/
chibupang
2020 年 5 月 7 日
我看 OOM 日志错误是在“work”反射调用的时候,是不是创建了大内存对象。
kingwang
2020 年 5 月 7 日
应该是出报表的时候跪了,看一下这些报表里会不会象楼上们所说的产生大量集合对象
iFlicker
2020 年 5 月 7 日
如果是 macOS 我推荐 Jprofiler ,平时 Android dump 堆内存查问题就是用这个看 比 as 强大
EmdeBoas
2020 年 5 月 7 日
机器内存多大?
cheng6563
2020 年 5 月 7 日
强烈推荐 Jprofiler 来观测 jvm 内存转存。轻松找到哪有问题
Huozy
2020 年 5 月 7 日
用的 was 吗?看看 was 控制台最大内存和最小内存是多少,如果操作的数据多了 超出一定范围会报内存溢出的
Solace202
2020 年 5 月 7 日
@Huozy was 是啥? AWS 吧?不是 AWS

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/669244

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX