Я пытаюсь создать систему, которая периодически обрабатывает дампы потоков в процессах JVM, чтобы их можно было анализировать позже в случае возникновения проблем. Я намерен вызывать минимальные накладные расходы для JVM, принимая при этом отвалы резьбы. Существует несколько способов получения дампов потоков, и я, наконец, кратко изложил 2 варианта: либо создать пользовательский агент JVMTI, либо использовать ThreadMXBean. Мне было интересно, кто-то проделал анализ того, какой подход приведет к наименьшему издержкам JVM? Или они вызывают одни и те же накладные расходы?Выполнение периодических дампов потоков на JVM - ThreadMXBean vs JVMTI agent
ответ
Зависит от желаемой частоты выборки, но в большинстве случаев это будет иметь некоторый эффект, и результаты будут предвзятыми. Если вы за JVMTI, определенно посмотрите на честный профайлер: https://github.com/RichardWarburton/honest-profiler
Спасибо. Полезно знать о безопасных точках и AsyncGetCallTrace. Это будет очень полезно для моих исследований. – Aniket
'AsyncGetCallTrace' хорош для профилирования. Однако он не создает дампы потоков. То есть 'AsyncGetCallTrace' может получить приятный след ** активного ** потока, но он не даст изображения всех потоков. – apangin
Согласовано. Мой вариант использования в основном предназначен для профилирования, а не для просмотра того, что все потоки делают в определенный момент. – Aniket
- 1. Мониторинг потоков в JVM
- 2. Создание дампов удаленных удаленных jvm программно
- 3. Выполнение периодических биллинговых заданий
- 4. Резервированное выполнение периодических заданий
- 5. Какой метод является наименее навязчивым для создания дампов потоков в java?
- 6. Выполнение периодических действий в Python
- 7. Выполнение способа измерения с помощью JVMTI
- 8. java agent с загрузкой jvmti во время выполнения, выгрузка изнутри
- 9. Несколько потоков в JVM
- 10. JVMTI не загружен
- 11. Идентификация исключений через JVMTI
- 12. Согласование Daemon vs User Agent на OSX
- 13. Выполнение периодических аудитов и передовой практики
- 14. Как агент JVMTI может установить флаг JVM при запуске?
- 15. JVMTI _jclass toString
- 16. Как связаться с агентом jvmti, прикрепленным к запущенному JVM
- 17. Сколько потоков запускается на каждом экземпляре JVM?
- 18. Запуск потоков Java на другом сервере/JVM
- 19. redefineClasses в JVMTI
- 20. OpenMP - выполнение потоков на кусках
- 21. Выполнение потоков паралелей на Powershell
- 22. Java Agent не загружается в JVM
- 23. Являются ли теги объектов, установленные JVM, видимыми для агентов JVMTI?
- 24. JVM аргумент для сохранения кучи дампов в разных дисках
- 25. ограничение количества потоков, используемых JVM
- 26. Есть ли способ генерации периодического дампа потока java с использованием JVMTI?
- 27. JVM справедливость при планировании потоков
- 28. Как продолжить выполнение процесса после завершения потоков?
- 29. Недоумение от поведения обратного вызова объекта jvmti
- 30. Выполнение нескольких преобразований котла на одном JVM
'ThreadMXBean' - самый худший способ получить дампы потоков. Он создает представление стека на уровне Java, поэтому он медленный и создает много мусора в куче. JVMTI - лучший способ. Однако еще лучше попросить JVM сделать трассировку стека для вас (см. Связанный ответ). – apangin
Спасибо, что связали вопрос. Просить JVM означает waitibg для безопасной точки, что в моем (профилировании) случае использования не требуется. Я действительно начал смотреть на использование перфомансов или DTrace. – Aniket
Если основной целью трассировки стека является профилирование ЦП, вы можете перефразировать вопрос. В нынешней форме вопрос действительно уже дан. – apangin