2011-11-18 229 views
4

使用Command-line JMX Client可以查詢ActiveMQ服務器。同時我希望能夠動態地爲服務器設置值。如MemoryLimit命令行JMX客戶端設置值

是否可以通過命令行JMX客戶端設置值,如果是,我如何設置內存限制?

這就是我能夠查詢的方式。

java -jar cmdline-jmxclient-0.10.3.jar - localhost:1099 org.apache.activemq:BrokerName=defaultBroker,Destination=Testing,Type=Queue MemoryLimit 

但我怎麼設置memorylimit?

下面我想:

java -jar cmdline-jmxclient-0.10.3.jar - localhost:1099 org.apache.activemq:BrokerName=defaultBroker,Destination=Testing,Type=Queue setMemoryLimit=300000` 

和如下失敗。

11/18/2011 11:56:28 -0800 org.archive.jmx.Client setMemoryLimit = 300000:未找到setMemoryLimit操作。

+0

你確定有一套方法嗎?你能從jconsole做到嗎?如果是這樣,那麼你應該能夠顯示被調用的方法,然後在命令行中複製方法名稱。 – Gray

+0

是的,我能用JConsole做到這一點。這就是爲什麼我想通過命令行來做到這一點,所以我可以自動化它。 – DarthVader

+0

如何在jconsole上看到什麼方法被調用?我看到一個gui。不要告訴我方法調用。 – DarthVader

回答

7

編輯

我建議你放棄效果jmxclient並切換到:

http://wiki.cyclopsgroup.org/jmxterm

它看起來是支持和更好的記錄。我懷疑它會起作用並讓你訪問setter - 如果它們存在的話。


如果設置的方法確實存在,那麼下面應該工作:

java -jar cmdline-jmxclient-0.10.3.jar - localhost:1099 \ 
    org.apache.activemq:BrokerName=defaultBroker,Destination=Testing,Type=Queue \ 
    setMemoryLimit=... 

下面是文檔:

http://crawler.archive.org/cmdline-jmxclient/

要找出哪些屬性可用於設置和獲取,我會使用jconsole。如果您使用的是Java6 + jconsole,那麼您可以通過單擊您想從中獲取信息的bean。這應該會顯示您在命令行上使用的ObjectName。然後,如果打開屬性列表,則屬性的名稱應該具有相應的get方法。如果該值爲藍色,則應該有相應的設置方法。

例如,如果您打開jconsole中的java.lang文件夾,則應該可以單擊ClassLoading。這表明你使用的ObjectNamejava.lang:type=ClassLoading。然後,您可以做以下列出各種可用的屬性和操作:

java -jar cmdline-jmxclient-0.10.3.jar - localhost:1099 \ 
    java.lang:type=ClassLoading 

您應該看到getter和setter方法的。這裏是你如何得到Verbose屬性:

java -jar cmdline-jmxclient-0.10.3.jar - localhost:1099 \ 
    java.lang:type=ClassLoading Verbose 

出於某種原因,我的版本CMDLINE-jmxclient不知道該怎麼辦boolean類型,因此它不會顯示爲一個二傳手。如果是這樣,你應該可以這樣做:

java -jar cmdline-jmxclient-0.10.3.jar - localhost:1099 \ 
    java.lang:type=ClassLoading setVerbose=true 
+0

對不起,忘了在我的問題中提到,我試過了,沒有工作。請參閱我的編輯。 – DarthVader