如何从命令行将参数传递到JMX MBean函数中

时间:2019-03-21 20:10:06

标签: java command-line jmx mbeans

我正在尝试通过命令行远程调用MBean。现在,我能够列出属性和操作。例如,我可以使用以下命令列出HotspotDiagnostic的所有属性和操作:

java -jar cmdline-jmxclient-0.10.3.jar admin:P@sSw0rd 10.11.12.13:1111 com.sun.management:type=HotSpotDiagnostic

哪个给我这个属性和操作列表

Attributes:
 DiagnosticOptions: DiagnosticOptions (type=[Ljavax.management.openmbean.CompositeData;)
 ObjectName: ObjectName (type=javax.management.ObjectName)
Operations:
 dumpHeap: dumpHeap
  Parameters 2, return type=void
   name=p0 type=java.lang.String p0
   name=p1 type=boolean p1
 getVMOption: getVMOption
  Parameters 1, return type=javax.management.openmbean.CompositeData
   name=p0 type=java.lang.String p0
 setVMOption: setVMOption
  Parameters 2, return type=void
   name=p0 type=java.lang.String p0
   name=p1 type=java.lang.String p1

但是现在让我们说我想调用dumpHeap操作,该操作分别接受两个参数p0和p1,分别为string和boolean类型。我该如何传递这些论点?

我已经尝试过这些:

java -jar cmdline-jmxclient-0.10.3.jar admin:P@sSw0rd10.11.12.13:1111 com.sun.management:type=HotSpotDiagnostic dumpHeap p0=aaa p1=true

java -jar cmdline-jmxclient-0.10.3.jar admin:P@sSw0rd10.11.12.13:1111 com.sun.management:type=HotSpotDiagnostic dumpHeap aaa true

但是我不确定语法是什么,甚至不确定应该为string参数传递的语法。顺便说一句,这不适合任何东西。只是想学习和了解更多有关如何从命令行利用这些操作的信息。非常感谢任何文档和帮助。

编辑:我很天真。 Oracle文档指示字符串param是每个this链接的输出文件。但是仍然不确定如何将参数传递到我的命令中。

1 个答案:

答案 0 :(得分:1)

根据cmdline-jmxclient文档: http://crawler.archive.org/cmdline-jmxclient/,您必须使用逗号分隔的参数来传递给您的操作。

所以在您的情况下,可能是:

java -jar cmdline-jmxclient-0.10.3.jar admin:P@sSw0rd10.11.12.13:1111 com.sun.management:type=HotSpotDiagnostic dumpHeap test,true

请注意,cmdline jar文件中存在一个错误,该错误未考虑Java原语(int,booelean,byte等),并且会抛出ClassNotFoundException,因为它无法通过原语名称找到

如果发现自己遇到此问题,则可以将补丁应用于此处记录的jar代码:https://webarchive.jira.com/browse/HER-1630。或者只是将jmx端点代码中的type字段从其原始类型更改为Wrapper对象类型(int-> Integer)