[英]Usage of XX:HeapDumpSegmentSize and XX:SegmentedHeapDumpThreshold
我遇到一個問題,由於以下消息,轉儲失敗:
java.lang.OutOfMemoryError: Java heap space
Dumping heap to /usr/local/webapp/logs/java_pid<MY_PID>.hprof ...
Dump file is incomplete: file size limit
我在這里找到了類似的質量檢查: XX:+ HeapDumpOnOutOfMemoryError最大文件大小限制 ,但它僅指的是我們可以用來解決此問題的選項,而不是如何使用它們。 在網絡上搜索也無濟於事,因為這些方面的信息很少。 更糟糕的是,我很少對它們進行測試,因為該問題很少發生。
我發現我的應用程序達到其最大堆大小(8GB)並嘗試轉儲堆,但是由於上述錯誤而失敗,並且轉儲的文件大小僅為2.2GB,這似乎是不完整的,並且所有工具(例如jhat,jconsole,jvirtualvm) )無法打開它。
如何通過使用選項XX:HeapDumpSegmentSize
和XX:SegmentedHeapDumpThreshold
來避免此問題?
1.8.0_71
-Xmx8196m
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=$LOG_DIR
-XX:OnOutOfMemoryError="kill -9 %p"
HeapDumpSegmentSize
和SegmentedHeapDumpThreshold
是開發人員選項,不能在生產JVM中更改。 這些選項仍然無濟於事,因為它們不是將堆轉儲拆分成多個文件,而是關於在一個文件內創建多個段。
確保ulimit -f
足夠大以創建8G文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.