2

我想用 java 编写应用程序,它将获取有关在 Jboss JVM 上运行的进程和线程的信息(%cpu 使用率、内存等)。我还想在 JVM (JBoss) 中查找有关内存使用情况和其他重要信息的信息。如何用纯java编写?

我知道 JConsole 之类的东西,但我需要自己编写。我发现 java.lang.managament 接口提供了一些有关系统、内存等的信息,但并未提供所有需要的信息。例如,我希望有机会读取每个线程使用的 cpu 使用情况(而不是 cpu 时间)和内存。(类似于 bash 中的 top 命令,但我需要在 java 中创建)。

有什么帮助吗?

编辑:最终我可以使用一些库来获取这些信息。

4

3 回答 3

0

正如 Adam 所说,有几种工具可以监控 java/jboss 资源的使用情况,另一种是JBoss RHQ

但是如果你真的需要自己编程,也许你会发现一些访问 jboss.system:type=ServerInfo mbean 的有用信息(检查它的属性和方法:listMemoryPools、listThreadCpuUtilization、listThreadDump ...)。您可以使用 JMX 控制台或以编程方式访问它们。

于 2012-11-08T21:39:44.720 回答
0

JBoss AS 7 提供不同的管理界面。所有基于 Detyped Management 表示 (jboss-dmr) 的管理接口。

您可以使用 jboss-dmr 库和 jboss-as-controller-client 实现自定义 Java 客户端。例如,请参阅我们的github 存储库

要获取有关 JVM 和其他内容的信息,您需要实现以下操作:

ModelNode operation = new ModelNode();
operation.get("operation").set("read-resource");
operation.get("recursive").set(true);
operation.get("include-runtime").set(true);
ModelNode address = operation.get("address");
address.add("core-service", "platform-mbean");

或者,您也可以使用 PlatformMBeanServer:

    //Get a connection to the JBoss AS MBean server on localhost
    String host = "localhost";
    int port = 9999;  // management-native port
    String urlString = "service:jmx:remoting-jmx://" + host + ":" + port;
    JMXServiceURL serviceURL = new JMXServiceURL(urlString);
    JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceURL, null);
    MBeanServerConnection connection = jmxConnector.getMBeanServerConnection();

    //Invoke on the JBoss AS MBean server
    connection.getObjectInstance(new ObjectName("java.lang:type=Threading"));
    //...
    jmxConnector.close();
于 2012-11-09T22:46:31.097 回答
0

你可以试试 Java Melody。它是一个非常好的监控 Java 应用程序的工具。在下面的链接中查看该工具

https://code.google.com/p/javamelody/

-Sushitha

于 2013-07-18T06:51:21.190 回答