Мониторинг приложений Java (8) - диагностический инструмент Ali arthas

Java

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.

arthas

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/

Связанное Чтение