2009-10-28 87 views
7

我目前正在編寫一個應用程序來監視另一個Java進程並在特定目標被擊中時執行特定操作。例如,如果某個線程在某段時間內死鎖,如果內存使用超過特定數量,發送電子郵件警報並終止進程等,請殺死該線程。是否有可能以編程方式關閉通過JMX的Java進程

我的應用程序將作爲獨立應用程序運行,監控特定的其他應用程序(本地,但從我可以看到遠程或本地沒有什麼區別)。我正在監視通過MXBeans的外部JVM,但看不到一個乾淨的方式來殺死外部進程,因爲系統調用像'kill -9'(我在UNIX上工作)。

有什麼辦法通過MXBean接口殺死JVM嗎?

格雷厄姆

+0

我不知道這樣做的出的現成辦法,但我傾向於實行「緊急停機」的MBean調用時只需調用System.exit(我也讓你通過在退出返回碼中)。 – Adamski 2009-10-28 10:48:14

回答

7

當然。在調用System.exit()的目標服務器上實現MBean,並將其作爲來自客戶端的JMX操作調用。

2

如果你使用Spring,你可以簡單地註釋你的bean有其業務的一個被暴露作爲MBean operation。所以它會是這樣的:

@MBeanOperation(description="Kill the service") 
public void die() { 
    System.exit(); 
} 

...或者也許你自己停止應用程序上下文。

+0

你的意思是'@ ManagedOperation' – skaffman 2009-10-28 12:09:08

相關問題