2011-07-26 27 views
5

在單臺計算機上運行多個JVM(單個IP地址)時,將JMX合併到每個JVM中需要單獨的端口。由於原因,我不會進入配置的端口在這個環境中是非常重要的,所以我想在每臺機器上都有一個JMX代理,它能夠訪問每個本地JVM和它們的JMX數據。這與在每個獨立進程中運行代理的本地SNMP守護進程相似。如何爲多個JVM提供單個JMX代理?

然而,短暫的端口是好的,因爲它們超出了我有權訪問的明確配置JMX的端口範圍。

我知道像Oracle Coherence這樣的產品在內部執行此操作,但是有沒有一些通用解決方案可以做到這一點?

回答

4

OpenDMK支持MBeanServer Cascading這在邏輯上是您想要實現的,它在一個MBeanServer的外觀下暴露多個MBeanServers。問題在於,即使對於同一主機上的JVM,也不存在「JVM間JVM遠程處理」的「無端口」形式,因此即使僅在本地主機上訪問,每個JVM仍需要綁定至少1個端口。 (使用JMXMP是最大限度減少端口使用的最佳選擇,因爲它是一種單一套接字解決方案,而不是RMI,這是非確定性的)。如果你能忍受這一點,那麼Cascading實際上可以很好地工作,並且協議在標準的當代JMX遠程規範中實現。

我認爲允許比主機上的實際端口多得多的JVM/JMX服務器的唯一方法是開發一個「無TCP」的JMX連接器服務提供程序或多播。

+0

是的,這正是我所尋找的。我實際上是獨立發現它的:http://weblogs.java.net/blog/emcmanus/archive/2007/08/combining_casca.html,它似乎運作良好。因爲它使用短暫的和未配置的端口,所以它實際上適用於我。 –

+1

很酷。您還可以使用Attach API查找JVM,激活並連接到您找到的每個JVM中的管理代理(JMX服務器)。這兩個API對你想要做的事情是相當不錯的。警告:如果「搜索者」沒有操作系統權限給另一個JVM發信號,則附加api將不起作用) – Nicholas

+0

是的,附加API非常適合這種情況。另外,它也只適用於Sun JVM。 –

相關問題