К основному содержанию
скилл официальный · GitHub

java-diagnostics — скилл для GitHub Copilot: функции и установка

Скилл помогает расследовать проблемы JVM по симптомам: утечки памяти, зависания потоков, высокий CPU и долгие паузы GC. Он подбирает утилиты JDK с учётом их нагрузки на процесс.

Установить в GitHub Copilot · GitHub CLI Все способы и платформы ↓
gh skill install github/awesome-copilot java-diagnostics
Открыть на GitHub

Что делает java-diagnostics

Скилл выстраивает диагностику Java-приложений от внешних симптомов к наименее нагруженным утилитам JDK. Агент опирается на матрицу решений для типичных сбоев: дедлоки или рост RSS без изменения размера кучи. В ход идут проверенные утилиты: jcmd и Java Flight Recorder (JFR).

Все операции разбиты на три уровня доступа. Первый уровень разрешает чтение базовых метрик и потоков без риска для сервиса. Второй и третий уровни требуют явного согласия. Например, профилирование через JFR создаёт нагрузку около 1-2%, а NMT summary добавляет 5-10%. Снятие дампов памяти через jmap относится к третьему уровню: оно ставит потоки на паузу в safepoint и несёт риск утечки секретов.

Диагностические утилиты запускают строго от того же пользователя операционной системы, который владеет процессом JVM. Перед вызовом GC.heap_dump проверяют свободное место на диске. Иначе процесс упадёт, ведь дамп весит как весь используемый хип.

Какие задачи решает

  • найти причину дедлока или зависания потоков через Thread.print
  • локализовать утечку памяти в куче перед снятием полного дампа
  • отследить рост потребления нативной памяти с помощью NMT
  • замерить долгие паузы сборщика мусора по логам GC и jstat
  • зафиксировать всплеск нагрузки на процессор связкой top -H и thread dumps

Примеры запросов агенту

  • Проверь процесс Java с PID 1420: процессор загружен на 100%, сними дампы потоков
  • Приложение упало с OutOfMemoryError, собери гистограмму классов и проверь сборщик мусора
  • Потребление памяти процессом растёт в обход кучи, настрой baseline для Native Memory Tracking

Как установить java-diagnostics

1GitHub CLI

gh skill install github/awesome-copilot java-diagnostics

2Вручную: положить файлы

.github/skills/java-diagnostics/SKILL.md

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о java-diagnostics

Как установить java-diagnostics в GitHub Copilot?

Выполните в терминале команду gh skill install github/awesome-copilot java-diagnostics. Также можно сохранить файл скилла вручную по пути .github/skills/java-diagnostics/SKILL.md.

Что делает скилл java-diagnostics?

Он предоставляет пошаговый алгоритм для поиска причин сбоев, дедлоков и утечек памяти в приложениях на JVM. Агент подбирает подходящую утилиту JDK, начиная с наиболее лёгких и безопасных команд.

Почему создание дампа памяти отнесено к третьему уровню опасности?

Команда GC.heap_dump приостанавливает работу приложения на точке safepoint и требует на диске объём, сопоставимый с используемой кучей. Дамп содержит пароли и токены, поэтому его запрещено выгружать во внешние сервисы.

Исходный текст

SKILL.md · MIT
---
name: java-diagnostics
description: 'Symptom-first runtime diagnostics for JVM applications using JDK tools: jcmd, jstack, jmap, jstat, JFR, GC logs, async-profiler, Native Memory Tracking, and Eclipse MAT. Use when a Java app has high CPU, memory leaks or OutOfMemoryError, slow startup, deadlocks or thread starvation, long GC pauses, native memory growth, or slow requests. Includes permission tiers for safe use.'
---

# Java Diagnostics

Pick the lightest tool that answers the question, starting from the symptom.

## Permission tiers (obey them)

| Tier | Tools | Rule |
|------|-------|------|
| 1. Read-only | `jps -l`, `jcmd <pid> help/VM.version/VM.flags/Thread.print`, `jstat`, `jstack`, reading logs | May run after stating the exact command. Class histograms (`jcmd <pid> GC.class_histogram`, `jmap -histo`, `jmap -histo:live`) are NOT Tier 1: they run heap inspection at a safepoint and can pause application threads on a large heap, so treat them as Tier 2 (consent, stated overhead). The default forms and `-histo:live` additionally force a full GC; `-all=true` / `jmap -histo` skip the full GC but still pause during the scan (and count unreachable objects). |
| 2. Recording / attach | JFR (`JFR.start`, `-XX:StartFlightRecording`), async-profiler, NMT (`-XX:NativeMemoryTracking`), enabling GC logs | Requires user consent. State duration and expected overhead (JFR default profile is about 1-2%; async-profiler depends on mode; NMT summary roughly 5-10%, detail more) before running. |
| 3. Intrusive / sensitive | Heap dumps (`GC.heap_dump`, `jmap -dump`), `jhsdb`, commands that print JVM arguments or system properties (`jps -v/-lv/-m`, bare `jcmd`, `VM.system_properties`, `VM.command_line`, `jinfo`, `ps aux` on a Java process; they can expose secrets, redact output), JDWP with suspend, anything on production | Requires explicit consent, a stated target path, free-disk check (a dump is about the size of the used heap), and a stated pause. Heap dumps contain secrets (passwords, tokens, personal data). Never share or upload them; redaction is NOT a reliable safeguard. Analyze locally and delete afterwards. |

Never run Tier 2 or Tier 3 commands against production unless the user explicitly instructs it. Run diagnostic tools as the same OS user as the target JVM. Prefer reproducing on dev or staging.

## Decision table

| Symptom | First step | Then | Reference |
|---------|-----------|------|-----------|
| High CPU | Thread dumps x3 (Tier 1) + `top -H` to map hot native thread ids to `nid` | JFR or async-profiler CPU flame graph (Tier 2) | [threads](references/thread-dumps.md), [jfr](references/jfr.md), [async-profiler](references/async-profiler.md) |
| Memory leak / OOM | `jstat -gcutil`, `GC.class_histogram -all=true` twice, minutes apart (Tier 2: safepoint pause even with `-all=true`; without it a full GC too; get consent on production) | Heap dump + Eclipse MAT (Tier 3) or JFR OldObjectSample (Tier 2) | [heap](references/heap.md), [gc](references/gc.md) |
| Slow startup | `-Xlog:class+load`, framework startup/condition reports, timestamped logs | JFR from start, async-profiler wall-clock | [jfr](references/jfr.md), [async-profiler](references/async-profiler.md) |
| Deadlock / thread starvation | `jcmd <pid> Thread.print` (reports deadlocks), compare dumps over time | Virtual threads: `Thread.dump_to_file` | [threads](references/thread-dumps.md) |
| GC pauses | GC log (`-Xlog:gc*`) and `jstat -gc` | JFR GC events; tune collector/heap | [gc](references/gc.md) |
| Native memory growth (RSS grows, heap does not) | Compare RSS vs heap; enable NMT, `jcmd VM.native_memory baseline` / `summary.diff` (Tier 2) | async-profiler `nativemem` or allocator tools | [nmt](references/native-memory.md), [containers](references/containers.md) |
| Slow requests | Tracing/metrics and logs first; Actuator or Dev UI (see below) | JFR (socket/file/lock events), async-profiler wall-clock | [jfr](references/jfr.md), [async-profiler](references/async-profiler.md) |
| JVM crash / hang, no tools respond | `hs_err_pid*.log`, core dump | `jhsdb` (Tier 3) | [basics](references/jcmd-basics.md) |

Start with [jps/jcmd basics](references/jcmd-basics.md) to identify the target JVM and confirm which JDK version is running.

## Workflow

1. Capture the symptom precisely (when, how often, since which change, JDK version, container limits).
2. Choose the tier needed; state the command, its overhead, and output location, and get consent for Tier 2/3.
3. Collect data to a dedicated directory, with timestamps. Prefer several samples over one.
4. Form a hypothesis from the data, then confirm with a second source (for example a thread dump plus a flame graph).
5. Fix, re-measure with the same method, and clean up artifacts (dumps, recordings).

## Application-level insights (optional)

JDK tools see the JVM; some questions (which endpoint, which SQL query, which bean) are easier at the application level. Optional options, in order of preference:

- **Spring Boot Actuator** (`metrics`, `health`, `loggers`, `httpexchanges`) and **Quarkus Dev UI** / Micrometer metrics are built in and need no extra tool. Expose Actuator endpoints minimally; For `heapdump` and `threaddump`, follow the policy in the `spring-observability` skill: never expose them over public HTTP; the only exception is a temporary, user-consented window with authentication, TLS and network restriction, removed afterwards.
- **BootUI** (https://github.com/jdubois/boot-ui , https://www.julien-dubois.com/boot-ui/): a local-only developer console with an opt-in MCP server for Spring Boot and Quarkus. Optional. Its skill can be installed with `gh skill install jdubois/boot-ui skills/bootui`.

If considering BootUI:

- Ask the user for consent before adding any dependency or installing the skill.
- Use it in a local/dev profile only; never expose it on a network, and never enable its heap dump, thread dump endpoints or MCP server in production.
- Check the capability and version first (read its README for the supported Spring Boot / Quarkus versions) instead of assuming features.

Follow the project's own documentation for usage; this skill does not reproduce it.

## Containers

See [containers](references/containers.md) for attaching tools inside containers, `-XX:MaxRAMPercentage`, and cgroup memory limits.

## References

- [jps / jcmd basics](references/jcmd-basics.md)
- [Thread dumps and deadlocks](references/thread-dumps.md)
- [Heap, histograms, Eclipse MAT](references/heap.md)
- [GC logs and jstat](references/gc.md)
- [JFR and JDK Mission Control](references/jfr.md)
- [async-profiler](references/async-profiler.md)
- [Native Memory Tracking](references/native-memory.md)
- [Containers](references/containers.md)
- Debugger-based investigation: the `java-debugging` skill.

Official docs (prefer them over this skill for the JDK in use; change `21` to your version): `jcmd` <https://docs.oracle.com/en/java/javase/21/docs/specs/man/jcmd.html>, `jfr` <https://docs.oracle.com/en/java/javase/21/docs/specs/man/jfr.html>, JFR guide <https://docs.oracle.com/en/java/javase/21/jfr/introduction-jdk-flight-recorder.html>, troubleshooting guide <https://docs.oracle.com/en/java/javase/21/troubleshoot/>, async-profiler releases <https://github.com/async-profiler/async-profiler/releases>.

© github · MIT · github/awesome-copilot

Похожие скиллы

Все скиллы по теме «Бэкенд и API» →
mcp-builder официальный anthropics Скилл проводит через создание MCP-сервера на TypeScript или Python: от изучения протокола до тестов и оценки качества. 130 949установок claude-api официальный anthropics Справочник по Anthropic SDK и API Claude для генерации кода без устаревших параметров и выдуманных методов. 74 198установок lark-im larksuite Скилл подключает Lark IM к агенту: он отправляет сообщения, ищет историю, управляет чатами и файлами. Подойдёт для задач вокруг командных коммуникаций. CX Codex +1 472 900установок lark-event larksuite Слушает события Lark/Feishu и отдаёт их потоком NDJSON. Подходит для ботов, обработчиков сообщений и долгих подписчиков. CX Codex +1 466 800установок caveman-discover JuliusBrussee Находит точки вызова LLM в репозитории и размечает их воркфлоу для Caveman Cloud, чтобы расходы на токены не сливались в одну общую кучу. CX Codex +1 104 400установок migration JuliusBrussee Скилл задаёт правила безопасных миграций схем, данных и API с обязательным откатом. Пригодится при изменениях, где нельзя терять данные или ломать совместимость. CX Codex +1 103 900установок

Из того же набора949

Весь набор →
quarkus-dev-services-and-testing Помогает настраивать Dev Services, писать тесты с @QuarkusTest и запускать интеграционные проверки в проектах на Quarkus. ★ 40 451звёзд репо quarkus-application-development Скилл помогает GitHub Copilot писать и менять код в существующем проекте Quarkus: REST, CDI, базы данных, Kafka и безопасность. ★ 40 451звёзд репо npm-trusted-publishing Настраивает npm trusted publishing через OIDC в GitHub Actions и убирает токены из публикации. Нужен при ошибках ENEEDAUTH, E404 и E422. ★ 40 451звёзд репо java-hibernate-jpa Скилл диагностирует и исправляет ошибки Hibernate и Jakarta Persistence в Java: от проблемы N+1 и пагинации до блокировок и кэширования. ★ 40 451звёзд репо cypress-flake-fixer Скилл ищет в существующем наборе тестов Cypress шаблоны, из-за которых тесты падают через раз, и правит их. Пригодится перед обновлением до Cypress 15 или 16. ★ 40 451звёзд репо create-quarkus-project Разворачивает каркас приложений на Quarkus с нужными модулями и запускает dev-режим. Пригодится при старте микросервисов на Java с Maven или Gradle. ★ 40 451звёзд репо winui3 Правило задаёт рекомендации для WinUI 3 и Windows App SDK: от XAML и потоков до окон и MVVM. Пригодится, чтобы Copilot учитывал особенности настольных приложений Windows. ★ 40 451звёзд репо vue Правило задаёт Copilot стандарты Vue 3: Composition API, <script setup>, реактивность, Pinia и Vue Router. Пригодится, когда агент пишет компоненты в вашем стиле. ★ 40 451звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой