我想弄清楚爲什麼Elasticsearch節點上的JVM堆使用率始終保持在80%以上。爲了做到這一點,我通過運行堆轉儲如何以最少的停機時間在堆中轉儲堆?
jmap.exe -heap:format=b 5348
(5348是進程ID)。然後我可以用VisualVM分析轉儲。
問題是jmap
在轉儲時暫停了JVM,因此該節點基本上離線了大約5分鐘。
This article表示一種更快的方法,它依靠在Linux上使用coredump與gdb
。我已經嘗試過創建核心轉儲的WinDbg,但是我無法在VisualVM中使用它。
對Windows有沒有類似的方法?如何在幾秒鐘內完成堆轉儲,而不是幾分鐘?
我會確保a)您使用的是二進制模式b)您的堆儘可能小,最小化堆大小,在轉儲之前觸發完整的GC。 –
嗨,彼得。我使用二進制模式,看到我編輯的問題,併爲混淆抱歉。由於這是生產機器,運行大量數據,因此我不能擁有更小的堆。 –
進行堆轉儲不會很便宜,因爲它將不得不停止JVM以獲取一致快照中的所有數據。 –