VisualVM/VisualGC提供了大量有用的实时gc相关指标,但我想要一个命令行工具,可以通过jstatd连接到远程应用程序,并在CSV或XML中记录与VisualGC提供的完全相同的指标。我自己写应该不成问题,但是第一眼我就找不到visualvm/jstatd使用的是什么协议。
据我所知,VisualGC不是开源的:https://stackoverflow.com/questions/11096466/where-is-the-source-code-repository-for-visualgc,但是有没有其他的开源工具?有关于使用的协议的线索吗?
我设法通过RMI连接到jstatd(默认端口1099,JStatRemoteHost是RMI -name),可以连接到特定的VM -但是http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/jvmstat/monitor/remote/RemoteVm.java#RemoteVm是jstatd的一个非常低级的接口。
我已经检查了VisualVM源代码从https://svn.java.net/svn/visualvm~svn/trunk并且刚刚开始查看5mb的代码库,但是它既不使用RemoteHost也不使用RemoteVm rmi类。
谢谢。
首先,我查看了VisualVM的源代码(约5mb),创建了一个命令行工具,该工具在JvmstatModelFactory上注册JvmstatModelProvider,获取应用程序,创建JvmJvmstatModel并提取所有MonitoredValues -它通过jstatd连接到远程应用程序并以格式打印更改的值timeMillis,名称,值1369270235646, sun.gc.generation.2.space.0.capacity, 167772161369270236666, sun.os.hrt.ticks, 25115004911369270237581, sun.gc.generation.0.space.0.used, 6414081369270237582, sun.os.hrt.ticks, 2512502544
一个小时后,我找到了适合我的任务https://code.google.com/p/hatter-source-code/wiki/hotstat的命令行工具,它不使用jstatd -但是很好,我仍然可以通过ssh远程运行它。