【发布时间】:2016-08-27 12:57:01
【问题描述】:
当 Xmx 值太高时,Apache Tomcat 中是否有可能出现“内存不足”错误?
我为什么问这个?
我们已将 Java 堆 (Xmx) 设置为 8GB。 设置 CATALINA_OPTS= -Xmx8192m 没有指定元空间(所以根据需要取,不会因为元空间出错)。
不过,Tomcat 会在一段时间后生成 OOM 错误并停止响应用户请求。
当我们检查 JVisualVM 的 Tomcat 进程时,堆和元空间图显示在限制范围内。 堆接近 1.5GB(共 8GB),元空间接近 200MB。
我发现这个链接提到堆太高时出现 OOM 错误。 https://confluence.atlassian.com/confkb/confluence-crashes-due-to-outofmemoryerror-gc-overhead-limit-exceeded-error-189433058.html。 我找不到足够的资源来加强这一点。
你能分享一下你的想法吗?
【问题讨论】:
-
请提供堆栈跟踪
-
你能分享完整的运行时参数吗?例如。 NewRatio、PermSize 等。据我了解,如果 GC 运行过于频繁,试图回收它认为应该能够回收但不能回收的东西,它会抛出 OOM 异常。例如,如果您编写了一个缓慢消耗内存的坏循环,即使没有达到那些已满的内存,它也可以检测到内存泄漏并可能引发错误。
-
Java 版本也很重要。
-
请记住,尝试创建太多线程也会引发 OutOfMemoryException
-
尝试用
visualvm或jprofiler调试它
标签: java tomcat garbage-collection out-of-memory