我想通過jstatd監視服務器上運行的所有Java進程。我已經設置了足夠的設置,以便可以與VisualVM連接並查看所有正在運行的進程。大多數顯示器工作正常,但某些事情(特別是CPU使用率和MBean)不顯示。相反,它說:通過jstatd查看MBeans
的MBean瀏覽器
數據不可用,因爲JMX連接到JMX代理不能成立。
我認爲這個問題是,應用程序必須「宣佈」通過jstatd
RMI註冊表,而不是當地的一個,所以我嘗試了(每these suggestions)以下,但它仍然不會顯示。我試過代碼如下:
public class JmxRmiConnectorTest {
public static void main(String[] args) throws Exception {
Registry rmiRegistry = LocateRegistry.createRegistry(9994);
String svc =
"service:jmx:rmi://localhost:9994/jndi/rmi://localhost:1099/connector";
MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
JMXServiceURL url = new JMXServiceURL(svc);
RMIConnectorServer rmiServer = new RMIConnectorServer(url, null, mbeanServer);
rmiServer.start();
Thread.sleep(100000);
rmiServer.stop();
}
}
我怎樣才能讓我的MBean和CPU使用率,當通過jstatd看到VisualVM的顯示?
查看我發佈的代碼,我通過上面的RMIConnectorServer導出JMX。所以我認爲這一部分已經涵蓋。但是,VisualVM並沒有像你所描述的那樣自動獲取連接,而是試圖找出錯誤的具體位置。謝謝。 – 2012-02-20 21:42:34
我不認爲這會奏效。 VisualVM可以通過jvmstat檢測JMX連接,因爲它可以訪問(通過jvmstat)被監視進程的命令行參數。請使用我上面概述的過程。設置幾個命令行參數比嚮應用程序添加特殊代碼要容易得多。 – 2012-02-21 11:54:18
謝謝,這是關鍵 - VisualVM通過解析命令行參數來計算出如何連接。這很愚蠢。我們有一個自定義導出器,因爲我們想綁定到一個特定的網絡接口(一個10.x網絡而不是公共IP)來減少攻擊向量。有沒有辦法讓它與定製出口商合作? – 2012-02-22 23:14:00