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>
- case 1:
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
Перезагрузите новый скомпилированный файл класса