大量的异常日志记录是否会导致 java.lang.OutOfMemoryError: 超出了 GC 开销限制



我的生产服务器正在java.lang.OutOfMemoryError: GC overhead limit exceeded

我在日志文件中唯一注意到的是,无法找到某些 id(这是业务逻辑的一部分)的方法抛出了太多完整的堆栈跟踪异常。

我正在使用org.slf4j进行日志记录。

所以我的问题是 - 大量日志记录会导致此问题,还是我应该专注于其他一些部分来检查内存泄漏?

对于这样的事情,你需要真实的信息而不是猜测。使用探查器(Netbeans 和大多数其他 IDE 都内置了一个),它可以准确地告诉您内存的去向。对于它的价值,除非您的设置日志记录中有一些非常奇怪的内容,否则不太可能导致问题。尽管异常中发生的任何情况都可能(或可能不)相关。

日志记录虽然可能很广泛,但只涉及短暂的生存对象,只有在极端情况下才会到达老一代。另一方面,GC overhead limit exceeded错误意味着几乎所有的堆都是可强访问的,并且只有一小部分对象需要回收。GC 必须努力识别这几个对象,并且必须经常这样做。

因此,您的

大量日志记录可能会导致您的问题并加剧它,但它几乎永远不会是它的真正来源。您必须找到永久占用堆的内容。

相关内容

最新更新