1. Что это? Какую проблему он решает?
Arthas (Эльзас) — это диагностический инструмент Java Alibaba с открытым исходным кодом, созданный разработчиками.
Артас может помочь вам, когда вы столкнулись с такими проблемами, как:
- Из какого пакета jar загружается этот класс? Почему сообщается о различных исключениях, связанных с классом?
- Почему код, который я изменил, не выполняется? Это потому, что я не совершал? Ветвь неправильная?
- Если вы столкнулись с проблемой и не можете отладить ее онлайн, можете ли вы опубликовать ее повторно, только добавив журнал?
- Есть проблема с обработкой данных пользователя онлайн, но ее нельзя отладить онлайн или воспроизвести офлайн!
- Есть ли глобальный вид, чтобы увидеть работоспособность системы?
- Есть ли способ отслеживать рабочее состояние JVM в реальном времени?
- Как быстро найти горячие точки приложения и сгенерировать график пламени?
Arthas использует интерактивный режим командной строки и предоставляет богатые функции автозаполнения с помощью вкладок, что еще больше упрощает обнаружение и диагностику проблем.
Если вы на самом деле исследуете его, вы обнаружите, что функция Артасаочень могущественныйИ больше не нужно работать сверхурочно, чтобы проверить проблему.
2. Зачем вам это нужно?
Многие компании имеют относительно полные системы мониторинга APM для приложений, которые могут охватывать и решать проблемы в большинстве сценариев;
Появление Arthas не должно заменить apm, и императивное взаимодействие на самом деле более интуитивно понятно, чем система графического мониторинга;
Arthas можно комбинировать с существующей системой мониторинга и использовать ее в соответствующих сценариях, чтобы помочь нам решать проблемы быстрее и лучше, а повышение эффективности является ключевым моментом;
(Кажется, es apm более ароматный?)
3. Быстрый старт
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
Получить пакет приложения arthas-boot напрямую через команду wget;
Arthas — это java-приложение, запускаемое через java -jar, arthas сканирует java-процесс текущей системы с помощью команды jps и печатает соответствующий идентификатор приложения;
Выберите серийный номер java-приложения для диагностики, нажмите Enter, чтобы прикрепить его для входа в консоль Arthas;Тогда вперед!
4. Список общих команд
Заказ | Функции |
---|---|
dashboard | Панель данных в реальном времени для текущей системы |
sc | Просмотр информации о загруженном классе JVM |
sm | Просмотр информации о методе загруженного класса |
jad | Декомпилировать исходный код указанного загруженного класса |
thread | Просмотр информации о стеке потоков текущей JVM |
watch | метод наблюдения за данными |
trace | Позвоните на путь внутри метода и выведите время, потраченное на каждый узел на пути метода |
stack | Вывести путь вызова, где вызывается текущий метод |
tt | Пространственно-временной туннель данных выполнения метода записывает входные параметры и возвращаемую информацию о каждом вызове указанного метода и может наблюдать за этими вызовами в разное время. |
monitor | Мониторинг выполнения метода |
classloader | Просмотр дерева наследования загрузчика классов, URL-адресов, информации о загрузке классов |
heapdump | Подобно функции дампа кучи команды jmap |
4.1.dashboard
определение:
- Панель данных текущей системы в режиме реального времени;
- Просмотр потока, виртуальной машины, информации о состоянии выполнения;
Заказ: dashboard -i 5000 -n 1
используемые сцены:Устранение общих неполадок приложений, просмотр аномальных потоков и т. д.;
4.2.sc
определение:
-
Просмотр информации о загрузке JVM класса;
-
Просмотр информации о классе, источнике, отношении наследования, загрузчике классов;
Заказ: sc -d ClassName
используемые сцены:
Проблемы, связанные с исключением загрузки класса, такие какClassNotFoundException, ClassCastException, ClassNoDefException…
(В процессе разработки часто необходимо полагаться на сторонние пакеты, и путаница разных версий пакетов может привести к связанным исключениям классов. Вы можете напрямую найти источник целевого класса с помощью этой команды)
4.3.sm
определение:
-
Проверить, что информация была загружена методом класса;
-
Укажите все имена методов в классе, типы входных и выходных параметров;
Заказ: sm -d ClassName method
используемые сцены:: исключение, связанное с методомNoSuchMethodException
;
(Это не очень практично, и дженерики не поддерживаются)
4.4.jad
значение:Decompile указывает, что загружен исходный код класса;
Заказ: jad —source-only ClassName
используемые сцены:
-
Указывает, будут ли отправлены изменения кода;
-
Посмотреть исходный код кода;
(Вы можете напрямую проверить метафизическую проблему, что код упакован и запущен, но не вступает в силу после изменения кода)
4.5.thread
значение:
thread -n
: Запрос первых n потоков с максимальной загрузкой ЦП.
thread id
: указывает стек потоков
thread -b
: Просмотр потоков, в настоящее время блокирующих другие потоки.
используемые сцены:Устранение неполадок с медленным ответом на запрос приложения, ожиданием блокировки и ненормальным расположением потока
(Дайте посмотреть, кто из одноклассников отравил код)
4.6.watch
значение:методы выполнения наблюдений за данными;
Заказ: watch ClassName method ‘{params[0],returnObj}’ -x n
используемые сцены:Определить входные и выходные параметры онлайн-вызова и наблюдать за вызовом метода;
(Позвольте мне посмотреть, какие параметры призрака вы мне дали???)
4.7.trace
значение:Вызовите путь внутри метода и выведите время, затраченное на каждый узел пути метода;
Заказ: trace ClassName method
используемые сцены:
-
Определить трудоемкий узел интерфейса;
-
Просмотр фактического пути вызова выполнения метода;
(Узел, отнимающий много времени, можно схватить, как только он будет схвачен, стабильно!)
4.8.stack
значение:Выведите путь вызова текущего вызываемого метода; много раз мы знаем, что метод выполняется, но путь этого метода выполняется очень часто, или вы не знаете, откуда выполняется метод, вам нужен стек команда;
Заказ: stack ClassName method -n 5 '1==1'
используемые сцены:
Просмотр фактического пути вызова выполнения метода. Если вы не можете понять путь выполнения кода в исходном коде, перейдите к нему напрямую;
4.9.tt
значение:Запишите входные параметры и возвращаемую информацию о каждом вызове указанного метода и наблюдайте за этими вызовами в разное время;
Заказ:
tt -t ClassName method
tt -i index
используемые сцены:
-
Просмотр записей вызовов методов;
-
Просмотрите метод исключения, стек;
4.10.диаграмма пламени профилировщика
значение:Поддерживает создание графиков пламени горячих точек приложений. По сути, это непрерывная выборка, а затем собранные результаты выборки преобразуются в график пламени;
Заказ: start --event cpu --interval 10000000
используемые сцены:
Устранение проблем с производительностью приложений с помощью графиков пламени;
4.11.ognl+Arthas (любая весенняя фасоль)
Используйте команду tt, чтобы получить контекст весны
tt -t org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod
tt -i 1000 -w ‘target.getApplicationContext().getBean("activityAdapterServiceImpl").findByUid("111")
ognl '#context=@com.alibaba.dubbo.config.spring.extension.SpringExtensionFactory@contexts.iterator.next, #context.getBean(“activityServiceImpl").findByUid("111")'
5. поддержка выражений ognl
Arthas интегрирует поддержку выражений ognl, что нам удобно для совмещения онлайн-отладки, написания выражений наблюдения и так далее.
определение:Язык объектно-графовой навигации;
Поддержка вызова статического метода класса и доступа к значению:
@ [Введите полное имя] @ [Имя метода | Имя значения]
exp:
ognl ‘@java.lang.System@out.println("hello)’
ognl ‘@com.seewo.SeewoResource@APP_CODE’
ognl -c 7f9a81e8 ‘@org.springframework.boot.SpringApplication@logger’
Резюме: ognl имеет понятие контекста (OgnlContext), а нижний слой представляет собой структуру карты.
Введение и практика языка OGNL:developer.IBM.com/this/articles…
6.Arthas idea plugin
Не можете вспомнить команду? Плагин идеи готов!
Цель:Упрощенная структура команд, проста в использовании;
используемые сцены:Иметь дело с проблемой наиболее быстро и удобная команда отладки вывода;
При его использовании щелкните правой кнопкой мыши место, которое необходимо отладить, выберите команду, скопируйте ее одним щелчком мыши, перейдите в консоль Arthas, вставьте ее и нажмите Enter для выполнения.действительно ладан.
Адрес установки:plugins.jet brains.com/plugin/1358…
Инструкции по применению:Woohoo. Yuque.com/docs/share/…
7. Сводка команд
8. Наконец
-
1. Для устранения неполадок в процессе разработки необходимо быть состоятельным;
-
2. Основываясь на нашем опыте и системе знаний, чтобы делать предположения и тщательно анализировать, а также использовать инструменты, помогающие нам проверять и решать проблемы;
-
3. Думайте больше, учитесь и практикуйтесь, чтобы повысить эффективность НИОКР;