Я пишу профилировщик с помощью JVM TI.
В C ++ я написал простой агент, который записывает собранную информацию в сокет. С помощью Java Swing я создал простой графический интерфейс, который считывает эти данные из сокета для визуализации.
Однако я столкнулся с некоторыми проблемами с юзабилити. Я хотел бы предоставить функциональность для начала профилирования Java-приложения по запросу. Существует Attach API , который обеспечивает возможность внедрения агента в работающую JVM.
Но запустить новую Java-программу и внедрить агент немного сложнее. Одним из способов будет сделать вызов в командной строке и запустить программу Java из GUI Profiler:
java -agentlib:agent Program
Мне как-то не нравится эта идея, потому что она как-то хакерская но другого пути я не вижу, а вы?
Подводя итог, мне нужно два способа начать профилирование JVM:
- Запустите Java-приложение с нуля и начните профилировать его напрямую
- Присоединитесь к работающей JVM и введите агент, чтобы начать его профилирование
Кроме того, мне нужно было бы различать различные JVM, которые я проверяю, но как это сделать? Не существует уникального идентификатора для разных JVM. Attach API дает возможность перечислять различные JVM с их именем и id , но что делать в первом случае? Можно ли ввести агенту с аргументами ?