我试图通过jstatd监视服务器上运行的所有Java进程。我已经设置足够的,我可以连接VisualVM并查看所有正在运行的进程。大多数显示器工作正常,但某些事情(尤其是CPU使用率和MBean)不会显示。相反,它说:
MBeans浏览器
数据不可用,因为无法建立与JMX代理的JMX连接。
我认为问题是应用程序必须通过jstatd
RMI注册表而不是本地注册表“宣布”,所以我尝试了以下(these suggestions),但它仍然赢了“显示。我尝试的代码如下:
public class JmxRmiConnectorTest {
public static void main(String[] args) throws Exception {
Registry rmiRegistry = LocateRegistry.createRegistry(9994);
String svc =
"service:jmx:rmi://localhost:9994/jndi/rmi://localhost:1099/connector";
MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
JMXServiceURL url = new JMXServiceURL(svc);
RMIConnectorServer rmiServer = new RMIConnectorServer(url, null, mbeanServer);
rmiServer.start();
Thread.sleep(100000);
rmiServer.stop();
}
}
当通过jstatd查看时,如何让我的MBean和CPU使用率显示在VisualVM中?
答案 0 :(得分:9)
jstatd与JMX无关。 Jstatd是Jvmstat的代理。要获得MBean和CPU使用率,您还需要启用JMX。有关详细信息,请参阅JMX Remote Monitoring and Management。一旦启用了JMX,VisualVM将自动检测(通过jvmstat)它也可以使用JMX,它将在一个地方显示来自jvmstat和JMX的数据。
答案 1 :(得分:0)
在remote中,像这样启动java以启用jmxremote。
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9191 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=`hostname` \
-jar app.jar
在区域设置中,使用jps,例如jps YOUHOSTNAME:9191
。