我想查找或開發可作爲守護程序運行的應用程序,當在主機上運行的Java應用程序出現任何異常或錯誤時,通過電子郵件或短信通知管理員。我知道JVMTI可以實現我的部分目標,但它會影響受監控應用程序的性能(我不知道它會有多少,如果它很輕微,它是可以接受的),除此之外,開發它似乎是一個麻煩的工作一個JVMTI代理,我不確定如果多個應用程序同時使用同一個代理運行會發生什麼情況。有更好的解決方案嗎?提前致謝。如何監視其他Java應用程序生成的異常或錯誤?
回答
一種方法是使用log4j這樣的日誌系統,將系統A上發生的所有錯誤發佈到系統B上的日誌服務器,從中可以監視發生的錯誤。然而,這不是一個完全通用的解決方案,因爲只有傳播到log4j(或任何其他日誌系統)的異常纔會被處理 - 但這可能是一個好的開始。
最好的解決方案是讓Java應用程序通過電子郵件/短信發送錯誤。問題是程序會在正常操作中生成異常並正確處理。你只想要特別的例外。
如果失敗,你可以寫一個日誌閱讀器,它讀取應用程序的日誌。這很難做到,但可以做到。
應用程序每天可能會產生超過1000個異常,因爲應用程序知道如何處理這些異常,所以仍然可以正常運行。例如每次套接字連接關閉時都會拋出異常。
Thx爲您的答案。那麼,幸運的是我們的應用程序都使用log4j,我正在考慮在log4j中使用套接字appender將LoggingEvent對象發送到遠程監聽器,這會更容易。儘管無法監控Java應用程序中所有可能的異常/錯誤,但這是一個可接受的解決方案。 – user545838 2010-12-20 03:19:02
JVMTI附近有一個替代品:JPDA。該基礎架構允許您使用Java代碼創建遠程「調試器」(是的,這就是您打算執行的操作),並使用本地或遠程連接將其連接到VM。
和JVMTI一樣,程序執行會有開銷。但是,如Trace.java
示例所示,實現並連接到目標VM非常簡單。
最後,請注意,如果你想測試由應用服務器(JBoss,Glassfish,Tomcat,你的名字)運行的代碼,還有其他各種方法可用。
IMO,最好的辦法是部署一個外部監測系統。這可以:
- 監視多個應用程序
- 監控基礎設施服務
- 監控網絡的可用性和可訪問性的機器,
- 監控資源,如處理器和文件系統的使用。
應用程序可以以多種方式進行監控,包括:
- 通過處理日誌事件,
- 通過監視應用程序重新啓動,
- 通過「ping」此應用程序的Web API來通過使用應用程序的JMX接口來檢查服務的活躍性,並且使用
- 。
該信息可以通過智能方式進行過濾和優先級排序,並且可以通過任何最合適的方式報告關鍵事件。
你不希望個別應用程序發送電子郵件,因爲他們沒有足夠的信息做一個體面的工作。此外,將報告邏輯放入單獨的應用程序中可能會導致實施不一致,配置性差等等。
有很多應用程序在那裏做你正在尋找的方式,不影響性能。您是否查看了企業解決方案的Kibana/ElasticSearch或Splunk或Logscape(它們都有免費版本)。
我將回應已經說過的內容,重點介紹java已經提供的內容以及您可以使用外部監視系統執行的操作。的Java已經提供:
- log4j的 - 記錄錯誤,警告,致命和例外文件
- JMX - 創建自定義應用程序指標,你也有機會獲得的java.lang/*它會給你堆內存使用量,垃圾回收,線程計數器等。
- JVM gc日誌記錄 - 您可以將所有的垃圾回收事件記錄到一個文件中並觀察任何長的完整GC集合。
外部監測系統將允許您設置觸發不同操作場景的警報。您還將通過圖表獲得系統性能的可視化。過去,我使用了Logscape's java應用程序來監視30個java進程分佈在3臺主機上。
- 1. 如何監視其他應用程序?
- 2. Java應用程序異常監視和警報
- 3. Java應用程序監視
- 4. Java程序來監視其他Java程序
- 5. 如何限制應用程序或以編程方式監視android中的其他應用程序活動?
- 6. 程序來監視其他程序
- 7. Java線程監視其他線程
- 8. 如何從Java中的其他應用程序中引發異常?
- 9. 應用程序或應用程序是否應該捕獲錯誤異常?
- 10. Java應用程序停止,沒有任何錯誤消息或異常
- 11. 使用SwingEventMonitor監視其他應用程序?
- 12. 如何監視標準/其他應用程序的CPU使用情況
- 13. Java:應用程序啓動方法錯誤中的異常
- 14. Java錯誤:應用程序啓動方法中的異常
- 15. 如何編譯Java或C++應用程序生成的代碼
- 16. 其他應用程序可以在生根後監視/訪問我的應用程序內部存儲器
- 17. iPhone應用程序生成錯誤
- 18. 煎茶應用程序生成錯誤
- 19. sencha應用程序生成錯誤?
- 20. FIN_WAIT Java監視應用程序問題
- 21. Java Web應用程序:監視進度
- 22. 如何處理Java Web應用程序中的異常和錯誤?
- 23. 如何使用Android操作系統中的其他應用程序監視一個應用程序
- 24. 在生產Java應用程序中使用JMX監視什麼?
- 25. 程序錯誤異常不應該被應用程序捕獲
- 26. 加載程序集時Xamarin生成錯誤異常:System.IO.FileNotFoundException
- 27. 如何使異常處理中的程序捕獲錯誤 - Java
- 28. 將應用程序生成的apprequest發佈給其他Facebook用戶使用Java
- 29. 如何在應用程序發佈時查找異常錯誤?
- 30. 如何監視或分析緩慢的.Net Web應用程序
感謝您的意見。我對log4j感到困惑的是,如果遠程系統上的監控進程崩潰了,重啓之後,它是否仍然可以接收來自log4j客戶端的日誌消息?據我瞭解,應該有一個服務器套接字線程或遠程監控進程中的東西,監聽一個端口並等待log4j作爲客戶端套接字來連接。當服務器關閉時,log4j客戶機中的套接字關閉;並且當服務器再次啓動時,如何通知log4j連接服務器而不重新啓動log4j客戶端本身? Thx提前:-) – user545838 2010-12-20 03:40:01
那麼,log4j的文檔說:「如果遠程服務器關閉,日誌請求就會被丟棄,但是如果服務器恢復正常,事件傳輸就會恢復透明。重新連接是由連接器線程執行的,該連接器線程會週期性地嘗試連接到服務器。「那很好〜 – user545838 2010-12-20 03:54:58