[英]Java PreparedStatement java.lang.OutOfMemoryError: GC overhead limit exceeded
[英]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 exceeded
了java.lang.OutOfMemoryError: GC overhead limit exceeded
。
我在日志文件中注意到的唯一一件事是,一個方法拋出了太多的完整堆棧跟蹤異常,這些異常無法找到某個id(這是業務邏輯的一部分)。
我正在使用org.slf4j
進行日志記錄。
所以我的問題是 - 廣泛的日志記錄會導致這個問題,還是我應該專注於其他一些部分來檢查內存泄漏?
對於這樣的事情,你需要真正的信息而不是猜測。 使用分析器(Netbeans和大多數其他IDE都內置了一個),它可以准確地告訴你內存的去向。 除非你的設置中有一些非常奇怪的內容,否則它的價值不太可能導致問題。 無論在異常中發生什么,都可能(或可能不)連接。
盡可能廣泛地記錄,僅涉及短期物體,僅在極端情況下才會到達老一代物體。 另一方面, GC overhead limit exceeded
錯誤意味着實際上所有堆都是強可達的,並且只有一小部分對象可以回收它。 GC必須努力識別這些少數對象,並且必須經常這樣做。
因此,您廣泛的記錄可能會導致您的問題並加劇它,但它幾乎永遠不會是它的真正來源。 你必須找到永久占據堆的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.