Дампы потоков могут помочь нам определить пики процессора, тупики, исключения памяти, медленный отклик применения, длительное время отклика и другие проблемы системы. Некоторые инструменты онлайн -анализа, такие как http://fastthread.io/, также могут помочь нам анализировать и найти проблемы, но эти инструменты требуют файла дампа. Поэтому в этой статье я суммировал способы схватить файлы с дампами потока Java в 7.
1. JStack
JSTACK-это эффективный инструмент командной строки для ползания файлов дамп потока. Он расположен в папке Bin (JDK_HOME/BIN) в каталоге JDK. Ниже приведена команда для ползания файлов дампы:
jstack -l <pid>> <pile -path>
иллюстрировать:
PID: идентификатор процесса приложения Java, то есть идентификатор процесса применения, который должен ползти файл дампа.
File-Path: путь к сохранению файла дампа.
Пример:
jstack -l 37320> /opt/tmp/threaddump.txt
Приведенный выше пример демонстрирует использование JSTACK для генерации файлов дампа в каталог/opt/tmp/threaddump.txt.
Начиная с Java5, JStack был включен в JDK. Если вы используете старую версию JDK, вам следует рассмотреть возможность использования других методов.
2. Убить -3
С точки зрения соображений безопасности, некоторые машины в производственных средах содержат только среды JRE, поэтому инструмент JStack не может быть использован. В этом случае мы можем использовать Kill -3:
kill -3 <pid>
иллюстрировать:
PID: идентификатор процесса приложения Java, то есть идентификатор процесса применения, который должен ползти файл дампа.
Пример:
kill -3 37320
При использовании Kill -3 для генерации файлов дампа файлы дампа выводятся в стандартный поток ошибок. Если ваше приложение работает на Tomcat, контент дампа будет отправлен в файл <tomcat_home> /logs/catalina.out.
3. JVisualvm
Java VisualVM - это графический инструмент интерфейса, который может предоставить информацию JVM. Он расположен в файле jdk_home/bin/jvisualvm.exe. Начиная с JDK6 Update7, он включен в JDK.
Запустите jvisualvm и на левой панели (как показано на рисунке ниже), указана информация JVM. Этот инструмент может получить файлы дампы с локального или удаленного запуска JVM.
Нажмите кнопку дампа потока, соответствующую имени процесса на рисунке выше, чтобы генерировать файл дампа, как показано на рисунке ниже:
4. JMC
Java Mission Control (JMC) - это инструмент, который может собирать и анализировать данные из локальной или производственной среды. Начиная с Oracle JDK 7 Update 40, он включен в JDK, который может генерировать файлы дампы из JVM. JMC находится в файле jdk_home/bin/jmc.exe:
После запуска инструмента вы можете увидеть процесс Java, который работает локально, который также может быть подключен к удаленной машине. Дважды щелкните процесс Java, который вы хотите сгенерировать файл дампа, нажмите «Регистратор полета», и вы увидите следующее диалоговое окно:
В раскрывающемся списке с дампом потока вы можете выбрать интервал времени для генерации файла дампа. В приведенном выше примере файл дампа будет генерироваться каждые 60 секунд. После выбора завершения, запустите рекордер полета, и вы увидите содержимое файла дампа на панели потоков:
5. Windows (Ctrl + Break)
Этот метод действителен только в операционных системах Windows:
Выберите командную строку в окне консоли
Нажмите команду "Ctrl + Break" в окне командной строки
Затем будет сгенерирован файл дампа, и содержимое файла дампа будет напечатано в окне командной строки.
ПРИМЕЧАНИЕ 1: Существует несколько ноутбуков (например, серия Lenovo T), которые отменили клавишу «Break», в этом случае вы должны Google для ключей, которые имеют аналогичные функции, как клавиша Break, и я обнаружил, что ключ «функциональный ключ + B» такой же, как и ключ «CTRL + FN + B» для генерации файла дампа.
ПРИМЕЧАНИЕ 2: Одним из недостатков использования приведенного выше метода является то, что содержание файла дампа будет напечатано на консоли. Если нет файла дампа, нам трудно использовать такие инструменты анализа, как http://fasthread.io для анализа файла дампа. Поэтому вы можете использовать следующую команду для вывода содержимого файла дампа в текстовый файл. Например, имя вашего приложения - это SampleReadReadProgram, поэтому обычные команды заключаются в следующем:
java -classpath . SampleThreadProgram
Команда для вывода содержимого файла дампа в текстовый файл заключается в следующем:
java -classpath . SampleThreadProgram > C:/workspace/threadDump.txt 2>&1
После нажатия клавиши «Ctrl + Break» файл дампа будет сохранен в C: /Workspace/threaddump.txt.
6. Threadmxbean
Начиная с JDK 1.5, была введена ThreadMxbean. Это интерфейс управления JVM. Используя этот интерфейс, вам нужно лишь небольшое количество кода для генерации файлов дампа. Ниже приведена основная реализация использования ThreadMxbean для генерации файлов дампа:
public void dumpThreadDump () {ThreadMXBEAN THITEMXBEAN = ManagementFactory.getThreadMxbean (); for (ThreadInfo Ti: ThreadMxbean.dumpallThreads (true, true)) {System.out.print (ti.toString ()); }}7. Dynamics APM Tool Tool Dynamics
Некоторые инструменты мониторинга производительности приложения предоставляют функцию генерации файлов дампа. Если вы используете динамику приложения для мониторинга вашего приложения, следующие шаги для создания файлов дампа:
Откройте окно «Создать действие» и выберите Diagnostics-> Возьмите дамп потока в окне «Создать действие»;
Введите имя действия, количество файлов дампа для ползания и интервал времени (миллисекунд) для ползания файлов дамп;
Если вы хотите выполнить некоторые действия до начала действия ползания дампа, вы можете выбрать выполнение требований до этого флажества перед этим действием и ввести адрес электронной почты отдельного лица или группы;
Нажмите ОК.
Суммировать
Хотя я перечислил 7 способов захватить файлы дампы раньше, IMHO, JStack и Kill -3 являются лучшим выбором по следующим причинам:
а Простой, легкий в реализации;
беременный Общее: в большинстве случаев, независимо от типа операционной системы, поставщика Java, JVM версии и т. Д.