Квалифицированный разработчик должен не только уметь писать код из первых рук, но и очень важным навыком является устранение неполадок. Упомянутые здесь проблемы устранения неполадок относятся не только к отладке в процессе кодирования, но и к устранению неполадок в режиме онлайн. Так как в производственной среде вообще нет возможности отладить (на самом деле есть некоторые проблемы, отладка тоже ерунда...), поэтому нам нужно использовать некоторые общие команды для проверки конкретной ситуации среды выполнения. информация включает, помимо прочего, журнал выполнения, стек исключений, использование кучи, ситуацию с GC, ситуацию с параметрами JVM, ситуацию с потоком и т. д.
При поиске проблем в системе знания и опыт являются ключом, данные — основой, а инструменты — средством использования знаний для обработки данных. Чтобы облегчить поиск и устранение неполадок, Sun предоставляет нам несколько общих команд. Эти команды обычно представляют собой тонкие оболочки библиотеки классов в jdk/lib/tools.jar. Устанавливается на машину вместе с установкой JVM в каталоге bin. Давайте посмотрим на эти команды и как их использовать. Подробнее обо всех командах, описанных в этой статье, см.Серия статей по изучению команд Java
jps
Функции
Команда для отображения pid всех текущих процессов Java.
Общие команды
jps
: отображает PID всех процессов Java текущего пользователя.
jps -v 3331
: Показать параметры виртуальной машины
jps -m 3331
: отображение параметров, переданных функции main().
jps -l 3331
: Показать полный путь к основному классу.
Подробное введение
jinfo
Функции
Просматривать и настраивать параметры виртуальной машины в режиме реального времени, можно отображать значения параметров по умолчанию, которые не указаны в отображении (jps -v 则不能
).
Эта команда больше не поддерживается в jdk8.
Общие команды
jinfo -flag CMSIniniatingOccupancyFration 1444
: запрос значения параметра CMSIniniatingOccupancyFration.
Подробное введение
jstat
Функции
Отображает текущие данные, такие как загрузка классов, память, сборка мусора и JIT-компиляция в процессе.
Общие команды
jstat -gc 3331 250 20
: запрашивать состояние сборки мусора процесса 2764 каждые 250 миллисекунд, всего 20 запросов.
jstat -gccause
: Дополнительный вывод последней причины GC
jstat -calss
: загрузка класса событий, выгрузка класса, общее пространство и затраченное время
Подробное введение
jmap
Функции
Создание моментального снимка дампа кучи (heapdump)
Общие команды
jmap -heap 3331
: Просмотр использования кучи Java (кучи)
jmap -histo 3331
: Просмотр количества и размера объектов в куче памяти (гистограмма)
jmap -histo:live 3331
: JVM сначала запускает gc, затем статистику
jmap -dump:format=b,file=heapDump 3331
: вывод сведений об использовании памяти в файл, который затем может быть проанализирован другими инструментами.
Подробное введение
jhat
Функции
Обычно используется вместе с jmap для анализа файла дампа кучи, созданного jmap.
Поскольку существует множество инструментов визуализации (Eclipse Memory Analyzer, IBM HeapAnalyzer), которые можно заменить, он используется редко. Однако он также доступен на машинах без средств визуализации.
Общие команды
jmap -dump:format=b,file=heapDump 3331
+ jhat heapDump
: разобрать файл дампа кучи Java и запустить веб-сервер.
Подробное введение
jstack
Функции
Создание моментального снимка потока в текущий момент.
Общие команды
jstack 3331
: просмотр ситуации с потоком
jstack -F 3331
: Используйте эту команду, когда нормальный вывод не отвечает
jstack -l 3331
: В дополнение к стеку отображать дополнительную информацию о блокировке
Подробное введение
Часто задаваемые вопросы о процессе определения местоположения
Частые проблемы с GC или проблемы с переполнением памяти
1. Используйтеjps
Просмотр идентификатора темы
2. Используйтеjstat -gc 3331 250 20
Проверьте ситуацию с GC, обычно уделяйте больше внимания области PERM и проверяйте рост GC.
3. Используйтеjstat -gccause
: Дополнительный вывод последней причины GC
4. Используйтеjmap -dump:format=b,file=heapDump 3331
Создать файл дампа кучи
5. Используйте jhat или инструменты визуализации (Eclipse Memory Analyzer, IBM HeapAnalyzer) для анализа ситуации с кучей.
6. Решите проблему переполнения или утечки памяти с помощью кода.
тупиковая проблема
1. Используйтеjps
Просмотр идентификатора темы
2. Используйтеjstack 3331
: просмотр ситуации с потоком
Эпилог
Регулярное использование соответствующих инструментов мониторинга и анализа виртуальных машин может повысить скорость анализа данных, выявления и решения проблем, но также знайте, что инструменты всегда представляют собой пакет знаний и навыков, и ни один инструмент не является панацеей.