我正在尝试通过命令行远程调用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链接的输出文件。但是仍然不确定如何将参数传递到我的命令中。
答案 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)