簡體   English   中英

如何使用JMX監視在內存不足時重啟JVM?

[英]How to restart JVM when it runs out of memory by using JMX monitoring?

我想為JVM創建一個nagios監視程序,查看JVM內存不足並重新啟動它。

目前我能夠設置JVM是允許JMX但我不知道如何檢測OutOfMemory條件並重新啟動它。

 /check_jmx -U service:jmx:rmi:///jndi/rmi://127.0.0.1:1100/jmxrmi -O "java.lang:type=Memory" -A "HeapMemoryUsage" -K used -I HeapMemoryUsage -J used -vvvv
 JMX OK HeapMemoryUsage.used=957414288{committed=2415984640;init=2147483648;max=2863333376;used=957414288}

https://github.com/tcurdt/nagios-check-jmx

如果您使用的是Java 1.4.2或更高版本,則此選項允許您在發生第一個OutOfMemeory異常時執行用戶定義的命令: -XX:OnOutOfMemoryError =“<cmd args>; <cmd args>”

這應該給你一些不錯的選擇。 例如,您可以啟動被動檢查nagios告訴它服務器正在重新啟動,然后啟動shell腳本以停止/啟動錯誤的JVM。

我不認為您將能夠使用JMX檢測到內存不足的情況。 如果JVM確實處於生命的終點,那么當您嘗試連接時,JMX連接很可能會自行拋出OOM異常。

我們檢測內存條件而不是OOM。 當我們的系統的自由存儲器在一定時間內低於某個水印時,我們會發出警報。 我們還有運行轉儲每服務度量標准文件的線程。 由於線程已經分配,​​因此可以在JVM用完后可靠地轉儲系統內存信息。

我們記錄:

// free memory
Runtime.getRuntime().freeMemory()
// current heap usage
Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()

暫無
暫無

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

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