【问题标题】:Tomcat OOM Error even when heap-used is well under the limit即使堆使用远低于限制,Tomcat OOM 错误
【发布时间】: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
  • 尝试用visualvmjprofiler调试它

标签: java tomcat garbage-collection out-of-memory


【解决方案1】:

正如其他评论者所说,要获得更好的答案,请提供堆栈跟踪和其他信息。

OutOfMemory 错误的另一种典型情况是,当您尝试一次性分配比可用内存更多的内存时,例如分配一个巨大的大型数组时。异常消息只是“java.lang.OutOfMemoryError: Java heap space”,在您分配数组的位置抛出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-16
    • 2020-10-19
    • 2018-05-09
    • 2021-01-12
    • 2017-10-01
    • 2021-05-01
    • 2018-11-30
    • 1970-01-01
    相关资源
    最近更新 更多