程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

新手避坑!盲目Copy配置竟让16G服务器内存爆仓

balukai 2025-07-23 13:04:17 文章精选 3 ℃

今天上午,产品同学反馈,服务出现异常, 但是稍等一会就又自动恢复了。一个研发同学跟了半天,他说从后台日志看,没有发现业务异常,不知道该怎么定位了。

然后找我帮忙一起定位下问题,这种问题,感觉不太像业务代码的问题,毕竟业务代码的异常是可以稳定复现的, 于是我先打开云服务器的监控看板, 发现现在内存占比长时间保持在 99% , 服务重启了 3次。 猜测可能是因为内存不足导致 OOM Killer 强制终止进程,导致重启。



使用命令 jstat 进行了排查,发现其实 Eden 区 和 老年代的内存占比并不高,而且YGC, FGC 也不频繁,比较合理。



继续排查内存问题,然后查看到服务器内存是 16g , 而 jvm 的堆内存设置了 15g。 这时候感觉到了困惑,是不是堆内存占比太高了? 导致预留的系统内存, 堆外内存不够处理而触发了 重启?



一般服务的堆内存设置为物理内存的 80%,而这时候我们的jvm设置已经是 91.5% 了。这显然是不合理的,于是自己查看 jvm 的相关配置,发现新生代的占比配置也偏高。 拉队友沟通得知,当时这个jvm的配置是另一个项目的,这个新项目就原封不动的copy 了 另一个项目的配置。最后,我们修改了jvm 堆内存占比,以及进行了参数优化,最后经过观察,无异常。


所以,jvm 的配置还是要根据物理机的配置,结合项目自己的特性来定。 不能无脑 copy 其他项目的配置。 当然对于这个问题的排查还是需要有一定的经验和知识储备,不然给一个新手,都不知道如何下手了。

Tags:

最近发表
标签列表