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

How to pass parameters into JMX MBean function from command line

我正在尝试通过命令行远程调用 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。我将如何传递这些参数?

我试过这些:

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

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

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

根据 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 端点代码中的类型字段从它的原始类型更改为它的 Wrapper 对象类型 (int -> Integer)