如何用JMX连接本地JVM上运行的Java程序

如何用JMX连接本地JVM上运行的Java程序,第1张

1. 使用一些类似下面的程序来连接JMX服务器。不过,需要在运行服务器时指定以下参数:

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.port=1234

-Dcom.sun.management.jmxremote.ssl=false

2.为了绑定特定地址,需要在增加下面的VM参数:

-Djava.rmi.server.hostname=A.B.C.D

3.这样,就可以像下面的JMX客户端代码一样连接你的服务器:

String host = "localhost" // or some A.B.C.D

int port = 1234

String url = "service:jmx:rmi:///jndi/rmi://" + host + ":" + port + "/jmxrmi"

JMXServiceURL serviceUrl = new JMXServiceURL(url)

JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceUrl, null)

try {

MBeanServerConnection mbeanConn = jmxConnector.getMBeanServerConnection()

// now query to get the beans or whatever

Set<ObjectName>beanSet = mbeanConn.queryNames(null, null)

...

} finally {

jmxConnector.close()

}

4. 也可以不使用VM参数,代码本身可以通过编程在指定端口号发布。但是这个已需求更复杂了。

如果要根据PID来连接,,需要使用Java 6以上的版本。代码:

List<VirtualMachineDescriptor>vms = VirtualMachine.list()

for (VirtualMachineDescriptor desc : vms) {

VirtualMachine vm

try {

vm = VirtualMachine.attach(desc)

} catch (AttachNotSupportedException e) {

continue

}

Properties props = vm.getAgentProperties()

String connectorAddress =

props.getProperty("com.sun.management.jmxremote.localConnectorAddress")

if (connectorAddress == null) {

continue

}

JMXServiceURL url = new JMXServiceURL(connectorAddress)

JMXConnector connector = JMXConnectorFactory.connect(url)

try {

MBeanServerConnection mbeanConn = connector.getMBeanServerConnection()

Set<ObjectName>beanSet = mbeanConn.queryNames(null, null)

...

} finally {

jmxConnector.close()

}

}

5.一个新的SimpleJMX包,该包能帮助很简单的启动一个JMX服务,并向远程客户端发送beans。

//创建一个新的服务器并监听8000端口

JmxServer jmxServer = new JmxServer(8000)

//启动服务器

jmxServer.start()

//注册下面定义的lookupCache对象

jmxServer.register(lookupCache)

jmxServer.register(someOtherObject)

//停止服务

jmxServer.stop()

该包确实有一个客户端的接口,但是当前没有人一种机制是可以通过PID来查找进程的,只支持主机/端口的组合方式查找。

首先使用ps -ef 确认你要监控的weblgoic,修改setDomain.sh文件 添加如下内容:

JAVA_OPTIONS="${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.port=9999"

JAVA_OPTIONS="${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.ssl=false "

JAVA_OPTIONS="${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.pwd.file=/opt/bea/jrockit90_150_06/jre/lib/management/jmxremote.password"

# JAVA_OPTIONS="${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.authenticate=false"

export JAVA_OPTIONS

关于jconsole的访问密码,可在该实例所使用的$JRE_HOME/lib/management/下配置,很重要的两个文件是

jmxremote.password.template #配置访问用户名与密码

jmxremote.access #增加该用户访问权限,

这样配置就好了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11788611.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存