tags: java, troubleshooting, monitor,arthas
Вкратце в одном предложении:
ArthasЭто инструмент диагностики Java с открытым исходным кодом от Alibaba, подходящий для онлайн-анализа и диагностики приложений Java. Это мастер инструментов мониторинга Java. Эта статья представит его.
1. Введение
предыдущий пост"мониторинг java-приложений (7) - онлайн-артефакт динамической диагностики BTrace"Мы упоминали, что если вам нужно отслеживать онлайн-приложения без непрерывного обслуживания, вам необходимо использовать технологию динамического отслеживания,BTraceЭто хороший инструмент динамического отслеживания, но он все еще немного сложен в использовании (вам нужно написать скрипт), поэтому есть более простой инструмент, то естьArthasТеперь это инструмент диагностики Java с открытым исходным кодом от Alibaba, который еще больше упрощает технологию динамического отслеживания.С его помощью вы можете напрямую просматривать информацию о загрузке классов, информацию JVM, информацию о стеке потоков, выполнение методов трассировки, декомпилировать файлы классов и т. д., в основном охватывая ранее упомянутые функции инструмента командной строки Java иBTraceфункция. Не много дополнительной работы, просто знакомствоArthasМожно использовать предоставленную команду, что очень удобно. фактическиArthasнижняя пяткаBTraceто же, исходя изjvm Agentспособ, использоватьInstrumentationМетод изменяет метод байт-кода, а затем выполняется и выводит. Эта статья будетArthasВведите использование , так как официальные документы были написаны очень подробно, рекомендуется, чтобы вы прочитали официальные документы непосредственно, чтобы узнать, эта статья предназначена только для привлечения других.Адрес официального сайта:https://alibaba.github.io/arthas
2 Установка и эксплуатация Arthas
2.1 Скачать Артас
Официальная рекомендация - напрямую загрузить банку и запустить ее.
wget https://alibaba.github.io/arthas/arthas-boot.jar
2.2 Бегущий Артас
загрузитьarthas-boot.jarПакет помещается на сервер, где находится приложение Java, которое вы хотите отслеживать, а затемSpring BootТа же приложение, вы можете напрямую использовать команду Java для запуска.
java -jar arthas-boot.jar
Уведомление:
- Первый запуск, медленная загрузка может быть использована
--repo-mirror aliyun --use-http - После запуска будет показан текущий список приложений Java (что-то вроде
jps -l), выведите серийный номер и выберите приложение, которое хотите отслеживать.
Сразу после запускаArthasИнтерфейс командной строки, вы можете использоватьArthasПредоставляет команды для реализации функций, которые необходимо контролировать. Как показано на рисунке ниже, приложение Java, которое необходимо отслеживать, является примеромjava-monitor-example.
2.3 Выход
Если вы просто выходите из текущего соединения, вы можете использоватьquitилиexitЗаказ. Arthas, подключенный к целевому процессу, продолжит работу, порт останется открытым, и вы сможете подключиться напрямую при следующем подключении.
Если вы хотите полностью выйти из Артаса, вы можете выполнитьshutdownЗаказ.
3 использование Артаса
ArthasЕго использование заключается в том, чтобы научиться использовать предоставляемые им командные функции, которые в основном делятся на несколько категорий:
- Основные команды:
help,cat,pwd,history,quitПодождите, это похоже на команду linux. - связанные с JVM:
dashboard,thread,jvm,sysenvПодождите, в основном для мониторинга информации JVM и изучения инструментов командной строки Java, прежде чемjinfo,jmap,jstackИ поэтому есть сходство в том же смысле. - связанный с классом/загрузчиком классов:
sc,sm,jad,dump,classloaderи т.п. - связанные с мониторингом/наблюдением/отслеживанием:
monitor,watch,trace,stackПодождите, эти функции в основном охватываютBTraceФункции, реализованные в , включая определение времени, параметры метода, возвращаемые значения, продолжительность вызова и т. д.
Ниже описаны несколько часто используемых команд, а подробный список команд можно найти в официальной документации.
3.1 Обзор:dashboard
запускатьArthasназад,-hПосмотреть справку по использованию:
$ dashboard -h
USAGE:
dashboard [-b] [-h] [-i <value>] [-n <value>]
SUMMARY:
Overview of target jvm's thread, memory, gc, vm, tomcat info.
EXAMPLES:
dashboard
dashboard -n 10
dashboard -i 2000
Эквивалентен обзору, отображающему поток, память, статус gc, статус vm и информацию о tomcat в одном интерфейсе. Как показано ниже (пример изображения официального документа):
Информация в этом обзоре по умолчанию обновляется каждые 5 секунд.Что касается изменений памяти, занятости потоков и времени сборки мусора, то все становится ясно с первого взгляда. использоватьctrl+cпокидать.
3.2 Информация о потоке:thread
все еще помнюjstack, Нам нужно найти идентификатор потока, использовать его для экспорта стека потоков, а затем просмотреть идентификатор потока. существуетArthasГораздо удобнее посередине, как вышеdashboard, идентификатор уже есть, используйте его напрямуюthread idВот и все.-hОзнакомьтесь со справочной документацией:
$ thread -h
USAGE:
thread [-h] [-b] [-i <value>] [-n <value>] [id]
SUMMARY:
Display thread info, thread stack
EXAMPLES:
thread
thread 51
thread -n -1
thread -n 5
thread -b
thread -i 2000
OPTIONS:
-h, --help this help
-b, --include-blocking-thread Find the thread who is holding a lock that blocks the most number of threads.
-i, --sample-interval <value> Specify the sampling interval (in ms) when calculating cpu usage.
-n, --top-n-threads <value> The number of thread(s) to show, ordered by cpu utilization, -1 to show all.
<id> Show thread stack
как показано вышеEXAMPLES,использоватьthreadкомандой, вы можете узнать N верхних потоков, занимающих больше всего ЦП (-n), который печатает текущий стек указанного потока (id), чтобы узнать, какие потоки в настоящее время блокируют другие потоки (-b), удобно анализировать проблемы с многопоточностью.
3.3 Информация JVM:jvm
jvmКоманда очень проста и не имеет параметров.Информация, которую она выводит, включает рабочие параметры, информацию о загрузке классов, состояние памяти, системную информацию, информацию о номере потока, дескрипторы файлов и т. д. Немного какjvisualvmв概述, но более подробно, чем это.
3.4 Декомпилировать:jad
Иногда необходимо определить, используется или обновляется ли новый код в приложении, работающем онлайн.Вы можете декомпилировать загруженный класс и проверить, является ли исходный код последним.jadочень полезно.-hСправка по использованию печати:
$ jad -h
USAGE:
jad [-c <value>] [-h] [-E] [--source-only] class-pattern [method-name]
EXAMPLES:
jad java.lang.String
jad java.lang.String toString
jad --source-only java.lang.String
jad -c 39eb305e org/apache/log4j/Logger
jad -c 39eb305e -E org\\.apache\\.*\\.StringUtils
OPTIONS:
-c, --code <value> The hash code of the special class's classLoader
-h, --help this help
-E, --regex Enable regular expression to match (wildcard matching by default)
--source-only Output source code only
<class-pattern> Class name pattern, use either '.' or '/' as separator
<method-name> method name pattern, decompile a specific method instead of the whole class
как показано вышеEXAMPLES, jad может декомпилировать классы (class-pattern), декомпилировать метод класса (method-name), если их несколькоclassLoader, вы также можете использовать-cвыбрать, что отображать и т. д.
3.5 Мониторинг выполнения метода:monitor
monitorВыполнение метода можно регулярно выводить для мониторинга, включая количество вызовов, количество успешных попыток, количество отказов, среднюю продолжительность, частоту отказов и т. д., что-то вродеBTraceсередина@Timer, но удобнее.-hПосмотреть справку по использованию:
$ monitor -h
USAGE:
monitor [-c <value>] [-h] [-n <value>] [-E] class-pattern method-pattern
SUMMARY:
Monitor method execution statistics, e.g. total/success/failure count, average rt, fail rate, etc.
Examples:
monitor org.apache.commons.lang.StringUtils isBlank
monitor org.apache.commons.lang.StringUtils isBlank -c 5
monitor -E org\.apache\.commons\.lang\.StringUtils isBlank
OPTIONS:
-c, --cycle <value> The monitor interval (in seconds), 60 seconds by default
-h, --help this help
-n, --limits <value> Threshold of execution times
-E, --regex Enable regular expression to match (wildcard matching by default)
<class-pattern> Path and classname of Pattern Matching
<method-pattern> Method of Pattern Matching
как показано вышеEXAMPLES, вы можете следить за выполнением метода, по умолчанию выводится один раз каждые 60 секунд, вы можете использовать-cизменить интервал вывода.
3.6 Мониторинг данных выполнения метода:watch
похожий наBTraceиз@OnMethod, если вы хотите выполнить параметры, возвращаемое значение, информацию об исключении метода в онлайн-приложении,watchкоманда очень подходит.-hИспользование справки:
$ watch -h
USAGE:
watch [-b] [-e] [-x <value>] [-f] [-h] [-n <value>] [-E] [-M <value>] [-s] class-pattern method-pattern express [condition-express]
SUMMARY:
Display the input/output parameter, return object, and thrown exception of specified method invocation
The express may be one of the following expression (evaluated dynamically):
target : the object
clazz : the object's class
method : the constructor or method
params : the parameters array of method
params[0..n] : the element of parameters array
returnObj : the returned object of method
throwExp : the throw exception of method
isReturn : the method ended by return
isThrow : the method ended by throwing exception
#cost : the execution time in ms of method invocation
Examples:
watch -b org.apache.commons.lang.StringUtils isBlank params
watch -f org.apache.commons.lang.StringUtils isBlank returnObj
watch org.apache.commons.lang.StringUtils isBlank '{params, target, returnObj}' -x 2
watch -bf *StringUtils isBlank params
watch *StringUtils isBlank params[0]
watch *StringUtils isBlank params[0] params[0].length==1
watch *StringUtils isBlank params '#cost>100'
watch -E -b org\.apache\.commons\.lang\.StringUtils isBlank params[0]
OPTIONS:
-b, --before Watch before invocation
-e, --exception Watch after throw exception
-x, --expand <value> Expand level of object (1 by default)
-f, --finish Watch after invocation, enable by default
-h, --help this help
-n, --limits <value> Threshold of execution times
-E, --regex Enable regular expression to match (wildcard matching by default)
-M, --sizeLimit <value> Upper size limit in bytes for the result (10 * 1024 * 1024 by default)
-s, --success Watch after successful invocation
<class-pattern> The full qualified class name you want to watch
<method-pattern> The method name you want to watch
<express> the content you want to watch, written by ognl.
Examples:
params
params[0]
'params[0]+params[1]'
'{params[0], target, returnObj}'
returnObj
throwExp
target
clazz
method
как показано вышеEXAMPLES, время мониторинга до выполнения метода (-b), выполнение метода завершается (-f, значение по умолчанию), метод выполняется успешно (-s). Содержание мониторинга включает: параметры (params), возвращаемое значение(returnObj),аномальный(throwExp)Ждать.
4 Резюме
ArthasМощная функция приложения Java может в основном выполнять всесторонний мониторинг приложений Java, и это хороший помощник для онлайн-мониторинга приложений.Эта статья относительно проста.ArthasВведение в установку и использованиеArthasДля дальнейшего изучения на официальном сайте есть подробные пояснения и примеры для каждой команды, чтобы сделать вашу технологию мониторинга Java более надежной.
Информация о параметрах
-
ArthasОфициальный сайт:https://alibaba.github.io/arthas/
Связанное Чтение
- мониторинг java-приложений (1) — технология мониторинга приложений, которую должны знать java-программисты
- мониторинг java-приложений (2) - секрет java-команды
- мониторинг приложений Java (3) — освоили ли вы эти инструменты командной строки
- Мониторинг Java-приложений (4) — онлайн-процедуры устранения неполадок
- мониторинг java-приложений (5) - инструмент визуального мониторинга
- Мониторинг приложений Java (6) — сторонний инструмент анализа памяти MAT
- мониторинг java-приложений (7) — онлайн-артефакт динамической диагностики BTrace