java - JVM 的历史趋势

标签 java jvm monitoring jmx

是否有现成的开源工具可以监视服务器上的远程 JVM 进程。

理想情况下,它会通过 JMX 读取遥测数据并存储到历史数据库中,并使用漂亮的 GUI 来呈现信息

我想要的关键信息是内存,gc时间、线程、类等

最佳答案

JDK 提供了两个图形工具来监控性能 -

  • jVisualVM 和
  • jConsole

它们都位于JDK的bin目录中。

不幸的是,它们都不允许以编程方式定期保存快照,也不提供可用于编写脚本的命令行版本。

一个好的开源解决方案是 jmxmonitor

JMX Monitor 项目提供了一个守护程序(或命令行)工具来监视一系列 JMX 服务。

这些被输出到滚动日志文件以供外部工具(例如 Nagios 或 Cacti)进行处理。

另一个选项是 Zabbix :

Zabbix 是一款监控网络众多参数以及服务器健康状况和完整性的软件。 Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的警报。这允许对服务器问题做出快速 react 。 Zabbix 基于存储的数据提供出色的报告和数据可视化功能。这使得 Zabbix 成为容量规划的理想选择。

但是,如果您对直接将“基本数据记录”到数据库感兴趣,那么编写自己的解决方案可能是最好的解决方案 - 特别是如果您想监视多个虚拟机 - 而且这并不是非常困难,请参阅:Monitoring a remote VM through the platform serverMonitoring and Management Using JMX

示例:

final JMXServiceURL address = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + SERVER_JMXPORT + "/jmxrmi");
final String[] credentials = new String[] { ADMIN, PASSWORD };
final Map<String, String[]> props = new HashMap<String, String[]>();
props.put("jmx.remote.credentials", credentials);

final JMXConnector connector = JMXConnectorFactory.connect(address, props);
final MBeanServerConnection mbs = connector.getMBeanServerConnection();

//Show the name and the state of all the threads
final ThreadMXBean threadBean = ManagementFactory.newPlatformMXBeanProxy(mbs, ManagementFactory.THREAD_MXBEAN_NAME, ThreadMXBean.class);
final long[] threadIDs = threadBean.getAllThreadIds();
final ThreadInfo[] threadDataset = threadBean.getThreadInfo(threadIDs);
for (final ThreadInfo threadData : threadDataset) {
    if (threadData != null) {
        System.out.println(threadData.getThreadName() + " " + threadData.getThreadState());
    }
}
System.out.println();
System.out.println("Current: " + threadBean.getThreadCount() + " peak " + threadBean.getPeakThreadCount());

将数据存储在数据库中后,可以使用大量工具以图形格式表示该数据以进行分析。

关于java - JVM 的历史趋势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13232888/

相关文章:

c# - 监视其他程序访问的文件

tomcat - 如何在不重启tomcat的情况下执行JMX监控

JAVA使用自定义数据类型将多个DATE保存到LIST中

Java 7 构造函数

java - XPage Java 类实例化为数据源

java - 如何在 CPU 能力很小的设备上通过足够的迭代生成 secret

unit-testing - 如何覆盖/控制 JVM 获取系统日期的方式?

java - JVM 安全管理器文件权限 - 自定义策略

java - Pragma Pack 使用 C 库导致 jvm 崩溃

azure - 删除 Log Analytics 工作区是否安全