Профайлер — це твій рентген, МРТ і інколи судово-медичний експерт. Він показує, де саме JVM їсть CPU/памʼять/локи/час, а не де менеджер “відчуває”.
Правильний інструмент = менше героїзму вночі, менше чату з токсичним PM, більше грошей і спокою.
Нормальна зв’язка сьогодні: JFR/JMC + async-profiler. Вони дають low-overhead знімки навіть на prod.
Інструменти JVM Profiling
| Інструмент | Тип / фокус | Оверхед | Prod‑safe | Сильна сторона | Коли брати |
|---|---|---|---|---|---|
| Java Flight Recorder (JFR) | CPU / heap / locks / GC / events | низький | так | Вбудований у JDK, дуже деталізовані події JVM | Майже завжди, особливо прод |
| JDK Mission Control (JMC) | GUI для JFR + аналіз | — | так | Глибока зручна візуалізація JFR | Коли треба не лише "зняти", а й зрозуміти |
| async‑profiler | CPU / alloc / locks + flamegraphs | низький | так / обережно | Нема safepoint‑bias, бачить native/GC/JIT | Коли треба швидко та чесно знайти hotspot |
| IntelliJ IDEA Profiler | IDE‑профайл (JFR+async) | низький | обережно | "Два кліки і готово" у IDE | Локально / стейдж |
| VisualVM | CPU / heap / threads | середній | обережно | Простий GUI, все в одному | Швидкий огляд сервісу без комерції |
| YourKit Java Profiler | CPU / heap / threads / IO | середній | часто так | Дуже сильний heap/alloc аналіз | Коли пахне витоком памʼяті або алокаціями |
| JProfiler | CPU / heap / threads / DB / IO | середній | часто так | Глибокі probes, історичні знімки | Коли треба розтинання "по шарах" |
| Datadog Continuous Profiler | Continuous CPU / alloc / locks | низький | так | Постійний профайлінг на проді (JFR-based) | Мікросервіси, latency‑полювання, SLO |
| New Relic Real‑time Profiler | Continuous JFR | низький | так | Вмикається та тюниться на льоту | Коли прод "горить", а рестарт табу |
| Grafana Pyroscope (Java) | Continuous flamegraphs | низький | так | Зберігає профілі як часовий ряд | Бачити деградацію після релізів |
| Google Cloud Profiler | CPU / heap / alloc (continuous) | низький | так | Хмарний профайлер зі статистичним семплюванням | Якщо вже в GCP та нема часу на DIY |
| Arthas (Alibaba) | trace / watch / profiler | низький | обережно | Живі діагностики у рантаймі | SSH є, IDE нема |
| jcmd / jstack / jmap / jstat | JDK CLI діагностика | низький | так | "Швейцарський ніж" JDK | Коли треба швидко зібрати факти в проді |
| Eclipse MAT | Heap dump analysis | — | так | Король аналізу hprof | Після OOM або дивних утримань обʼєктів |
| HPROF heap dumps | Дампи памʼяті | високий | обережно | Сирі дані для MAT / YourKit | Коли інше не показує, хто жере heap |
| Honest Profiler | CPU sampling | низький | обережно | Альтернатива async‑profiler | Коли треба незалежну перевірку |
| perf‑map‑agent + Linux perf | Native CPU profiling | низький / середній | обережно | Ідеально для JNI / kernel | Коли підозра, що JVM не винна |
| Elastic Universal Profiling + APM | Continuous host‑level | низький | так | Кореляція трас і CPU | Коли треба "видно все в одному місці" |
| Glowroot | APM + sampling | середній | обережно | Простий self‑hosted UI | Малий проєкт, потрібен APM "з коробки" |
| AppDynamics | APM + snapshots | середній | так (платно) | Глибокий аналіз транзакцій | Якщо ентерпрайз вже купив |
| Dynatrace | APM + continuous profiling | низький / середній | так (платно) | Автоінтеграції, smart baselines | Коли DevOps живе у Dynatrace |
| JITWatch | JIT / компіляція | — | так | Пояснює, чому JIT не оптимізує | Коли код "ок", а швидкість ні |
| GCViewer / GCEasy | GC logs analysis | — | так | Людський розбір GC‑пекла | Коли latency стрибає через GC |
| jHiccup | Pauses / latency | низький | так | Ловить JVM hiccups | Коли SLA про плавність важливіші throughput |
| JDK25 CPU‑time Profiler | Новий семплер CPU‑time | низький | обережно | Менше шуму, точніші виміри CPU | Якщо ти на JDK25+ |
| DJXPerf / OJXPerf | PMU‑based memory/object profiling | низький/середній | обережно | Дуже глибокі memory‑інсайти | Для performance‑маніяків та R&D |