![](/img/trans.png)
[英]Should Kubernetes restart my JVM app when going out of memory?
[英]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}
如果您使用的是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.