Консольный клиент для jstatd/visualgc
VisualVM/VisualGC предоставляет довольно много полезных метрик, связанных с GC, в режиме реального времени, но мне нужен инструмент командной строки, который может подключаться к удаленному приложению через jstatd и записывать в CSV или XML в идеале точно такие же метрики, что и VisualGC. Это не должно быть проблемой, чтобы написать свой собственный, но с первого взгляда я не могу найти, какой протокол использует visualvm / jstatd.
Как я понимаю, VisualGC не является открытым исходным кодом: https://stackru.com/questions/11096466/where-is-the-source-code-repository-for-visualgc, но есть ли альтернативные инструменты с открытым исходным кодом? Есть ли какие-либо подсказки, как насчет используемого протокола?
Мне удалось подключиться к jstatd через RMI (порт по умолчанию 1099, JStatRemoteHost - это имя rmi), я могу подключиться к определенной виртуальной машине - но 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 и только начал смотреть на кодовую базу 5 Мб, однако он не использует ни RH-классы RemoteHost, ни RemoteVm.
Благодарю.
1 ответ
Сначала я посмотрел исходный код VisualVM (~5 МБ), создал инструмент командной строки, который регистрирует JvmstatModelProvider в JvmstatModelFactory, получает приложение, создает JvmJvmstatModel и извлекает все MonitoredValues - он подключается к удаленному приложению через jstatd и печатает измененные значения в формат timeMillis, имя, значение 1369270235646,sun.gc.generation.2.space.0.capacity,16777216 1369270236666,sun.os.hrt.ticks,2511500491 1369270237581,sun.gc.generation.0.space.0.used,641408 1369270237582,sun.os.hrt.ticks,2512502544
Через час я нашел правильный инструмент командной строки для своей задачи https://code.google.com/p/hatter-source-code/wiki/hotstat, который не использует jstatd - но хорошо, я все еще могу запустить это удаленно через ssh.