由于内存中断,Tomcat被docker容器杀死

时间:2017-08-03 15:56:29

标签: tomcat docker memory jvm

我最近用tomcat开发了一个休息服务。我设置JAVA_OPTS = -Xmx1648m -Xmn1648 -server并确保它们已经生效。 docker正在运行,内存限制设置为4g。

观察结果是tomcat进程的内存使用量持续增长,最终达到4g。然后,在几分钟到几小时之间随机的时间内,内存成本保持在99%~100%之间。然后,tomcat进程崩溃,没有任何错误,如jvm heap oom。

当docker stats观察到的内存消耗大约为3.5g时,我使用了jmap来转储堆。转储文件大小低于400米。使用mat来分析转储文件显示大多数内存分数实际上可能是垃圾回收。我还手动运行jcmd pid GC.run,这大大减少了内存使用量(从2g到1.4g)。

我的检查是tomcat从未达到jvm设置的限制,否则,应该有关于jvm heap oom的错误日志。然后,内存应该由jvm或tomcat中的其他线程使用。但我无法找到解决这个问题的方法。请帮忙!

1 个答案:

答案 0 :(得分:0)

当Xmx设置为1648即1.4G时,JVM将不会使用更多。如果存在内存分配问题,则可能导致OOM。当你说“内存成本保持在99%~100%之间”你的意思是RAM内存吗?在那种情况下,你的RAM大小是多少?你的任务负载是多少?你经常进行I / O操作吗?