我正在尝试从当前运行的JVM中获取JMX指标。我希望能够在运行应用程序时无需在CLI上启用它即可完成此操作。我正在尝试编写一个通用的CLI实用程序,其中一些功能是JConsole和JMC所缺少的。JConsole和JMC都可以完成此操作。但是,似乎没有任何文档说明它们是如何完成此操作的。
2g32fytz1#
视情况而定。如果您只想从本地运行的应用程序获取它,您可以使用attach API。以下是如何使用attach API运行诊断命令的示例:http://hirt.se/blog/?p=542您还可以使用附加API获取存根以进行本地JMXRMI通信。如果要启动远程代理,可以使用jcmd和ManagementAgent.start diagnostic命令执行此操作。
rdrgkggo2#
对于cli应用程序开发人员来说有点离题,但对命令行用户可能有用:您可以使用jcmd命令激活/停用正在运行的JVM的“远程侦听JMX代理”,该JVM是在没有任何关于JMX的特定内容的情况下启动的。命令必须在与目标jvm相同的主机上运行,并且使用相同的用户启用JMX代理:
jcmd <jvm_pid> ManagementAgent.start \ jmxremote.port=<listen_on_tcp_port> \ jmxremote.authenticate=false \ jmxremote.ssl=false
禁用JMX代理:
jcmd <jvm_pid> ManagementAgent.stop
2条答案
按热度按时间2g32fytz1#
视情况而定。如果您只想从本地运行的应用程序获取它,您可以使用attach API。以下是如何使用attach API运行诊断命令的示例:
http://hirt.se/blog/?p=542
您还可以使用附加API获取存根以进行本地JMXRMI通信。
如果要启动远程代理,可以使用jcmd和ManagementAgent.start diagnostic命令执行此操作。
rdrgkggo2#
对于cli应用程序开发人员来说有点离题,但对命令行用户可能有用:
您可以使用jcmd命令激活/停用正在运行的JVM的“远程侦听JMX代理”,该JVM是在没有任何关于JMX的特定内容的情况下启动的。命令必须在与目标jvm相同的主机上运行,并且使用相同的用户
启用JMX代理:
禁用JMX代理: