Профилирование JVM с помощью JVMTI, как отличить разные JVM? - PullRequest
2 голосов
/ 07 апреля 2011

Я пишу профилировщик с помощью JVM TI.

В C ++ я написал простой агент, который записывает собранную информацию в сокет. С помощью Java Swing я создал простой графический интерфейс, который считывает эти данные из сокета для визуализации.

Однако я столкнулся с некоторыми проблемами с юзабилити. Я хотел бы предоставить функциональность для начала профилирования Java-приложения по запросу. Существует Attach API , который обеспечивает возможность внедрения агента в работающую JVM.

Но запустить новую Java-программу и внедрить агент немного сложнее. Одним из способов будет сделать вызов в командной строке и запустить программу Java из GUI Profiler:

java -agentlib:agent Program

Мне как-то не нравится эта идея, потому что она как-то хакерская но другого пути я не вижу, а вы?

Подводя итог, мне нужно два способа начать профилирование JVM:

  1. Запустите Java-приложение с нуля и начните профилировать его напрямую
  2. Присоединитесь к работающей JVM и введите агент, чтобы начать его профилирование

Кроме того, мне нужно было бы различать различные JVM, которые я проверяю, но как это сделать? Не существует уникального идентификатора для разных JVM. Attach API дает возможность перечислять различные JVM с их именем и id , но что делать в первом случае? Можно ли ввести агенту с аргументами ?

Ответы [ 2 ]

2 голосов
/ 28 октября 2013

Вы также можете создать свой собственный GUID в Agent_OnLoad и использовать его для регистрации. Таким образом, если некоторые из ваших процессов имеют короткую и долгую жизнь, вы можете различить вторичные PIDS.

1 голос
/ 01 августа 2011

Я решил проблему с помощью локальной идентификации процесса (pid) и сетевого адреса для уникальной идентификации JVM.

...