我目前正在使用jconsole
来监控我的Java应用程序的性能指标,并希望编写 数据采集。
有没有办法检索这些VM指标(堆内存使用情况,线程数,CPU使用率等)到STDOUT
?
top -p PID -b -n 1
中的数据并没有完全消除它。
由于
答案 0 :(得分:12)
jconsole只提供了平台MBeanServer中的JMX MBean的包装。
您可以编写一个程序,使用Attach API连接到您的VM,然后查询MBean。
或者您可以通过RMI公开平台MBeanServer并以这种方式查询MBean。
有关详细信息,请参阅java.lang.management包
答案 1 :(得分:9)
也许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
答案 2 :(得分:7)
查看jmap
,它可用于从控制台获取堆转储。
对于堆转储中未涵盖的数据,我相信jconsole只是使用JMX连接到正在运行的JVM来获取统计信息 - 所以很可能创建自己的应用程序,可以从JMX中提取相同类型的统计信息。
答案 3 :(得分:7)
您可以通过命令行使用此jmx查询工具:http://crawler.archive.org/cmdline-jmxclient/
答案 4 :(得分:5)
用于监视Java应用程序的一些其他有用的CLI工具是:
答案 5 :(得分:3)
答案 6 :(得分:2)
jstack在其正常输出中提供了许多有用的信息。堆内存使用可直接使用,按GC区域分解;线程计数可以用一点perl / grep / etc来确定。
答案 7 :(得分:0)
这是对您问题的部分答案:
set JAVA_OPTS=%JAVA_OPTS% -Xloggc:logs\gc.log -XX:+PrintGCDetails -XX:MaxPermSize=128m
答案 8 :(得分:0)
我已成功使用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)。