【发布时间】:2010-11-14 16:52:53
【问题描述】:
我目前正在使用jconsole 来监控我的 Java 应用程序的性能指标,并希望编写这个数据采集。
有没有办法将这些 VM 指标(堆内存使用率、线程数、CPU 使用率等)检索到 STDOUT?top -p PID -b -n 1 中的数据并不完全正确。
谢谢
【问题讨论】:
标签: java performance command-line monitoring jconsole
我目前正在使用jconsole 来监控我的 Java 应用程序的性能指标,并希望编写这个数据采集。
有没有办法将这些 VM 指标(堆内存使用率、线程数、CPU 使用率等)检索到 STDOUT?top -p PID -b -n 1 中的数据并不完全正确。
谢谢
【问题讨论】:
标签: java performance command-line monitoring jconsole
看看jmap,它可用于从控制台获取堆转储。
对于堆转储中未涵盖的数据,我相信jconsole 只是使用 JMX 连接到正在运行的 JVM 以获取统计信息——因此很可能创建自己的应用程序,该应用程序可以从 JMX 中提取相同类型的统计信息。
【讨论】:
jstack 在其正常输出中提供了许多有用的信息位。堆内存使用情况直接可用,按 GC 区域细分;线程数可以用一点 perl / grep / 等来确定。
【讨论】:
jconsole 只是为平台 MBeanServer 中的 JMX MBean 提供了一个包装器。
您可以编写一个程序以使用 Attach API 连接到您的 VM,然后查询 MBean。
或者您可以通过 RMI 公开平台 MBeanServer 并以这种方式查询 MBean。
查看java.lang.management 包了解更多信息
【讨论】:
这是您问题的部分答案:
set JAVA_OPTS=%JAVA_OPTS% -Xloggc:logs\gc.log -XX:+PrintGCDetails -XX:MaxPermSize=128m
【讨论】:
我已成功使用 tomcat jmxproxy 进行脚本访问 (http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#Using_the_JMX_Proxy_Servlet)。
我没有使用过其中任何一个,但其中一个 jmx-rest 项目可能是非 tomcat 服务器 (http://www.google.com/search?q=jmx+rest) 的一个选项。
【讨论】:
您可以通过命令行使用这个jmx查询工具:http://crawler.archive.org/cmdline-jmxclient/
【讨论】:
也许jvmtop 值得一看。
它是一个命令行工具,可为多个指标提供实时视图。
JvmTop 0.4.1 amd64 8 cpus, Linux 2.6.32-27, load avg 0.12
http://code.google.com/p/jvmtop
PID MAIN-CLASS HPCUR HPMAX NHCUR NHMAX CPU GC VM USERNAME #T DL
3370 rapperSimpleApp 165m 455m 109m 176m 0.12% 0.00% S6U37 web 21
11272 ver.resin.Resin [ERROR: Could not attach to VM]
27338 WatchdogManager 11m 28m 23m 130m 0.00% 0.00% S6U37 web 31
19187 m.jvmtop.JvmTop 20m 3544m 13m 130m 0.93% 0.47% S6U37 web 20
16733 artup.Bootstrap 159m 455m 166m 304m 0.12% 0.00% S6U37 web 46
【讨论】:
【讨论】: