【发布时间】:2018-08-07 12:48:55
【问题描述】:
我有一个应用程序,它的后端是基于 Java 8 构建的。最近我看到应用程序会自行重启,因为 OOM。通过查看 Docker Container 的退出状态,我了解它是因为 OOM。没有为系统配置 Xmx 和 Xms 值,因此它应该使用默认的堆大小,如果我的服务器有 4 gigs 的内存应该是 512 MB 左右(我读了一些 SO回答默认堆最大大小是当前内存的 1/8)。设置 Xms 和 Xmx 值后,我的应用程序现在可以正常运行,无需重新启动。在设置 Xmx 和 Xms 值之前,我还尝试将服务器中的内存增加到 7 gig,但这也没有帮助。我想知道的是,当有足够的内存可供应用程序使用时,系统怎么会OOM。
如果应用程序的内存需求增加,默认堆大小是否会自行扩展?如果内存快满了,为什么 GC 没有被触发?
【问题讨论】:
-
请将堆栈跟踪与您的 OOM 放在一起,因为此异常可能是由于:系统中的 ulimit 太小/整个系统内存不足/非堆内存大小不足。
标签: java java-8 garbage-collection jvm heap-memory