2011-11-18 177 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