JVM的历史趋势



是否有一个开源工具可用,可以监视服务器上的远程JVM进程。

理想情况下,它将通过JMX读取遥测,并将其存储到具有漂亮GUI的历史数据库中,以呈现信息

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

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

  • jvisualvm和
  • jconsole

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

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

一个好的OpenSource解决方案是JMXMonitor

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

将这些输出到外部工具(例如Nagios或仙人掌)的滚动日志文件进行处理。

另一个选项是Zabbix:

zabbix是监视网络的大量参数以及服务器的健康和完整性的软件。Zabbix使用灵活的通知机制,该机制允许用户为几乎任何事件配置基于电子邮件的警报。这允许快速反应服务器问题。Zabbix根据存储的数据提供了出色的报告和数据可视化功能。这使Zabbix非常适合能力计划。

但是,如果您对直接到数据库的"基本数据记录"感兴趣,则可能是最佳解决方案 - 尤其是当您要监视多个VMS时 - 而且这并不十分困难,请参见:监视遥控器通过平台服务器进行VM,并使用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());

一旦将数据存储在数据库中后,就有很多工具可以以图形格式表示该数据以进行分析。

最新更新