Ответ
Прямое подключение интрузивных профилировщиков (например, JProfiler, YourKit) к Production не рекомендуется из-за значительных накладных расходов на производительность. Это может усугубить проблему.
Рекомендуемая стратегия для Production:
-
Сбор дампов памяти (Heap Dumps):
- Автоматически при ошибке OOM:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump.hprof - Вручную с помощью
jmap:jmap -dump:live,format=b,file=dump.hprof <pid>Дампы анализируются локально в инструментах (Eclipse MAT, VisualVM).
- Автоматически при ошибке OOM:
-
Мониторинг и логи:
- Включите детальные логи сборщика мусора (GC):
-Xlog:gc*,gc+heap=debug:file=gc.log - Используйте метрики JVM (через JMX, Micrometer, Prometheus) для отслеживания динамики использования heap.
- Включите детальные логи сборщика мусора (GC):
-
Альтернативы с низкой нагрузкой:
- Async Profiler — сборник профилей CPU/memory с минимальным overhead.
- Flight Recorder (JFR) — встроенное в JVM событийное профилирование.
Если интрузивный профилировщик абсолютно необходим, подключайте его на короткое время в период минимальной нагрузки.