簡體   English   中英

廣泛的異常日志記錄會導致java.lang.OutOfMemoryError:超出GC開銷限制

[英]Can extensive exception logging cause java.lang.OutOfMemoryError: GC overhead limit exceeded

我收到了java.lang.OutOfMemoryError: GC overhead limit exceeded我的生產服務器java.lang.OutOfMemoryError: GC overhead limit exceededjava.lang.OutOfMemoryError: GC overhead limit exceeded

我在日志文件中注意到的唯一一件事是,一個方法拋出了太多的完整堆棧跟蹤異常,這些異常無法找到某個id(這是業務邏輯的一部分)。

我正在使用org.slf4j進行日志記錄。

所以我的問題是 - 廣泛的日志記錄會導致這個問題,還是我應該專注於其他一些部分來檢查內存泄漏?

對於這樣的事情,你需要真正的信息而不是猜測。 使用分析器(Netbeans和大多數其他IDE都內置了一個),它可以准確地告訴你內存的去向。 除非你的設置中有一些非常奇怪的內容,否則它的價值不太可能導致問題。 無論在異常中發生什么,都可能(或可能不)連接。

盡可能廣泛地記錄,僅涉及短期物體,僅在極端情況下才會到達老一代物體。 另一方面, GC overhead limit exceeded錯誤意味着實際上所有堆都是強可達的,並且只有一小部分對象可以回收它。 GC必須努力識別這些少數對象,並且必須經常這樣做。

因此,您廣泛的記錄可能會導致您的問題並加劇它,但它幾乎永遠不會是它的真正來源。 你必須找到永久占據堆的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM