2010-12-16 94 views
1

我想要寫非特權(非根訪問)JMX客戶端,其監視特權程序(root運行)應用程序,其具有JMX本地訪問啓用-Dcom.sun.management.jmxremote。訪問控制JMX本地監控

至少MacOSX上,JConsole的(和JPS)沒有看到根進程時,我爲自己運行。

這只是這裏的生活的事實,還是有一些方法來配置這個?

回答

1

如果您的客戶端不允許看到根過程,那麼你就無法通過PID重視。您需要的是讓根應用程序加載一個將監聽[> 1024]端口的JMXServer,然後您可以通過端口而不是通過PID進行連接。最簡單的方法是指定幾個系統屬性,它們將觸發JVM自動加載JMX服務器。例如(這些都是最不安全的):

  • -Dcom.sun.management.jmxremote.authenticate =假
  • -Dcom.sun.management.jmxremote.ssl =假
  • -Dcom。 sun.management.jmxremote.port = 7777

參見JMX Management and Monitoring Properties

以編程方式創建一個JMXServer,查看javadoc瞭解javax.management.remote。有關這個主題here真的很好的指導/教程。

+0

哦,拜託,請你指點我手動啓動JMX服務器而不是-D的東西?這樣的服務器會暴露VM bean中的構建嗎? – bmargulies 2010-12-16 21:25:17

+0

更新回答。是的,這將允許您訪問內置的VM MXBeans。 – Nicholas 2010-12-16 21:58:58

1

JMX使用一個簡單的TCP端口,您可以使用一些命令行選項來定義它。如果端口是開放的,任何人(包括非特權用戶)都應該能夠看到它。

至於這個過程本身,JPS無法看到其他用戶的進程,但你可以用「PS AUX」看到那麼。