Влюбитесь в Arthas, инструмент для диагностики Java

Java

1. Что такое Артас?

Из введения Артаса на Github:

Arthas is a Java Diagnostic tool open sourced by Alibaba.

Arthas allows developers to troubleshoot production issues for Java applications without modifying code or restarting servers.

Общая идея такова: Arthas — это инструмент диагностики Java с открытым исходным кодом от Alibaba, который может помочь разработчикам быстро обнаруживать онлайн-проблемы без изменения кода или перезапуска сервера.

Звучит как отличная привилегия для наших программистов. Например, мы столкнулись с ситуацией: в приложении Spring Boot есть запланированная задача cron, которая запускается и выполняется в 1:00 каждый день, но ее очень неудобно тестировать, невозможно каждый раз изменять время cron для QC. тестирование, да? Хоть это и удобно для тестирования девушек, но увеличивает время разработки и количество итераций! ! ! Так сможет ли Артас удовлетворить наши потребности? Продолжать...

2. Начать путешествие Артаса

2.1 Установить Артаса

  • Способ 1: Как скачать пакет arthas-boot.jar
wget https://alibaba.github.io/arthas/arthas-boot.jar

В этот момент в вашем текущем каталоге будетarthas-boot.jarСумка.

Попробуйте Артас:

# 启动arthas,会进入命令行交互状态
java -jar arthas-boot.jar

# 查看arthas命令手册
java -jar arthas-boot.jar -h

  • Способ 2: Установить Arthas через as.sh (настоятельно рекомендуется)
# 该命令会下载 as.sh 到当前目录下
curl -L https://alibaba.github.io/arthas/install.sh | sh

Попробуйте Артас:

# 启动arthas,会进入命令行交互状态
./as.sh

# 查看arthas命令手册
./as.sh -h

2.2 Начало работы

Ниже мы покажем, что мыas.shглавный.

Сначала запускаем arthas, и мы увидим, что приложение, развернутое на нашем текущем сервере, было обнаружено.В настоящее время на моем сервере есть только одно приложение.Просто введите цифру 1 для взаимодействия с приложением:

2.2.1 Основные команды

  • пройти черезdashboardкоманда для просмотра данных мониторинга приложений в режиме реального времени

  • пройти черезthreadКоманда для просмотра всех потоков в приложении

где первый столбец — это идентификатор потока.

  • пройти черезthread threadIdКоманда для просмотра информации о состоянии указанного потока

    • Например, мы хотим просмотреть информацию о состоянии потока с идентификатором потока 506:

    • Конечно, поскольку это взаимодействие командной строки, оно также поддерживает операции потоковой передачи конвейера:

  • пройти черезwatchкоманда для просмотра параметров метода, возвращаемых значений и информации об исключении

  • пройти черезscКоманда для просмотра информации о классе

    • пройти черезsc yourFullClassName

    • пройти черезsc -d yourFullClassName*Чтобы просмотреть информацию о классе, загруженную JVM

    • пройти черезsc *yourClassName*Чтобы просмотреть информацию о классе, загруженную JVM

  • пройти черезsmКоманда для просмотра информации о методе класса

    • case 1: sm java.math.RoundingMode

    • case 2: sm -d java.math.RoundingMode

    • case 3: sm java.math.RoundingMode <init>

2.2.2 Команда выделения

  • пройти черезjad yourFullClassNameПерейти к просмотру полной информации о коде после декомпиляции

  • пройти черезjad --source-only yourFullClassName > /tmp/yourClassName.javaЭкспорт декомпилированного кода во временный каталог

  • пройти черезvim /tmp/yourClassName.javaОтредактируйте и измените код

  • пройти черезsc -d *yourClassName | grep classLoaderHashзагрузитьсяyourClassNameзагрузчик классов

  • пройти черезmc -c classLoaderHash /tmp/yourClassName.java -d /tmpПерекомпилируйте модифицированный класс с тем же загрузчиком классов (mc: компилятор памяти).

  • пройти черезredefine /tmp/yourFullClassName.classПерезагрузите новый скомпилированный файл класса

2.2.3 Другие рабочие случаи

Пожалуйста, обратитесь к официальному руководству для получения дополнительных сведений о работе и использовании.

использованная литература