Ответ
Профилирование на production требует баланса между сбором информации и минимальным влиянием на производительность. Основные инструменты:
1. Java Flight Recorder (JFR) + Java Mission Control (JMC)
Сбор данных с минимальным overhead (1-2%):
# Запуск JFR для работающего приложения
jcmd <PID> JFR.start name=prod_profile duration=60s filename=/tmp/prod.jfr
# Постоянная запись с дампом при инциденте
java -XX:StartFlightRecording=settings=profile
-XX:FlightRecorderOptions=repository=/tmp/jfr
-jar application.jar
Анализируемые метрики:
- CPU: Hot methods, allocation rates
- Memory: GC activity, heap pressure
- I/O: File/socket read/write
- Locks: Monitor contention, deadlocks
2. Async-Profiler (профилирование с низкими накладными расходами)
# CPU profiling
./profiler.sh -d 30 -f /tmp/flamegraph.html <PID>
# Allocation profiling
./profiler.sh -d 30 -e alloc -f /tmp/alloc.html <PID>
# Lock contention profiling
./profiler.sh -d 30 -e lock -f /tmp/lock.html <PID>
3. Диагностика через дампы
# Heap dump для анализа утечек памяти
jmap -dump:live,format=b,file=/tmp/heap.hprof <PID>
# Thread dump для анализа deadlocks
jstack <PID> > /tmp/threads.txt
# Или через сигнал
kill -3 <PID>
4. APM-системы (Continuous Profiling)
- Datadog APM: Continuous Profiler, трассировка распределённых систем
- New Relic: Thread profiling, database query analysis
- Pyroscope: Open-source, хранение и сравнение профилей
Best Practices для production
- Короткие сессии профилирования: 30-60 секунд во время пиковой нагрузки.
- Сэмплирование вместо инструментирования: Async-Profiler вместо
-XX:+ExtendedDTraceProbes. - Фокус на проблемах:
- High CPU: CPU profiling + flame graphs
- Memory leaks: Heap dumps + MAT/Eclipse Memory Analyzer
- Slow requests: Tracing + JFR method profiling
- Безопасность: Ограничить доступ к диагностическим командам, не хранить дампы с конфиденциальными данными.
- Автоматизация: Интеграция с системами мониторинга для сбора дампов при аномалиях.
Важно: Всегда тестируйте влияние инструментов профилирования в staging-среде перед использованием на production.