[Официальное сообщество Артаса проводит конкурс сочинений, за участие можно получить призы~Нажмите, чтобы отправить】
1. Шаги по началу работы
1. Установка
art has.git ee.IO/install-deency…
Приведенная выше команда загрузит файл сценария запуска.as.sh
в текущий каталог:
curl -L https://alibaba.github.io/arthas/install.sh | sh
or
as.sh запуск:
curl -sk https://arthas.gitee.io/arthas-boot.jar -o ~/.arthas-boot.jar && echo "alias as.sh='java -jar ~/.arthas-boot.jar --repo-mirror aliyun --use-http'" >> ~/.bashrc && source ~/.bashrc
2. Опыт онлайн-обучения
Alibaba.GitHub.IO/art has/art is very…
Конечно, вы также можете испытать его локально ~ Вы можете начать работу напрямую, загрузив демо-версию плагина arthas-idea-plugin.
Описание глобальной команды
- -x - глубина обхода атрибута результата отображения, по умолчанию 1
- -n количество выполнений, q выходов
- -c хеш-значение загрузчика классов
- выход q , закрыть остановку
3. Разобраться в функциях наиболее часто используемых трассировок и часов
наблюдение и трассировка — наиболее часто используемые функции диагностики Arthas для разработчиков для решения проблем в режиме онлайн!
trace
Базовый пример
trace com.wangji92.arthas.plugin.demo.controller.CommonController getRandomInteger -n 5 '1==1'
- Оптимизация производительности~
- Вызовите этот метод, принимая конкретный процесс Zeyang! Это можно увидеть, вызвав chain.
- Есть аномалия, что вы можете просматривать необычный стек.
Расширенные возможности
Команда trace будет отслеживать только подвызовы в совпадающей функции и не будет отслеживать несколько уровней. Поскольку трассировка требует больших затрат, несколько уровней трассировки могут привести к большому количеству классов и функций, которые в конечном итоге будут трассироваться.
trace -E xxxClassA|xxxClassB method1 | method2
trace -E com.wangji92.arthas.plugin.demo.controller.CommonController|com.wangji92.arthas.plugin.demo.service.ArthasTestService traceE|doTraceE -n 5 '1==1'
watch
wathc буквально означает информацию о значениях наблюдения, вы можете просматривать входные параметры, возвращаемые значения, исключения, исполняемые выражения для получения статических переменных, цели.здесь~
Базовый пример
watch com.wangji92.arthas.plugin.demo.controller.CommonController traceE '{params,returnObj,throwExp}' -n 5 -x 3 '1==1'
4, основная переменная выражения Артаса
public class Advice {
private final ClassLoader loader;
private final Class<?> clazz;
private final ArthasMethod method;
private final Object target;
private final Object[] params;
private final Object returnObj;
private final Throwable throwExp;
private final boolean isBefore;
private final boolean isThrow;
private final boolean isReturn;
// getter/setter
}
Если смотреть с обратной стороны часов, то трассировка '1 == 1' выполняется условным выражением, которое истинно при выполненииognl выражение, смотри params, returnObj, throwExp входные параметры, возвращаемое значение, не является ли оно ненормальным Это тоже выражение, так что же происходит?
весеннее выражение
Много лет не учил огнлВесна должна знать его выражение лица, в выражении el также есть концепция, называемая [Контекстный контекст и выражение], как показано ниже, потому что простой контекст может анализировать значение сценария "booleanList[0]"~ Это очень знакомо и легко для понимания, тогда ognl выражения так же просты.
class Simple {
public List<Boolean> booleanList = new ArrayList<Boolean>();
}
Simple simple = new Simple();
simple.booleanList.add(true);
StandardEvaluationContext simpleContext = new StandardEvaluationContext(simple);
// false is passed in here as a string. SpEL and the conversion service will
// correctly recognize that it needs to be a Boolean and convert it
parser.parseExpression("booleanList[0]").setValue(simpleContext, "false");
// b will be false
Boolean b = simple.booleanList.get(0);
ognl выражения
Артас такой же, но использует скрипт под названием ognl, основной переменной является его контекст, и эти поля можно получить напрямую. Поля params, returnObj, throwExp, наблюдаемые watch, — это то, что мы называем концепцией контекста, наблюдаемых параметров, возвращаемых значений и информации об исключениях.
Ниже приведен код оценки выражения и наблюдения за выполнением значения наблюдения в исходном коде Arthas! Advice — это контекст, и здесь добавляется переменная const. Зная это, разве это не легко? ?
com.taobao.arthas.core.advisor.ReflectAdviceListenerAdapter#isConditionMet
/**
* 判断条件是否满足,满足的情况下需要输出结果
* @param conditionExpress 条件表达式
* @param advice 当前的advice对象
* @param cost 本次执行的耗时
* @return true 如果条件表达式满足
*/
protected boolean isConditionMet(String conditionExpress, Advice advice, double cost) throws ExpressException {
return StringUtils.isEmpty(conditionExpress) ||
ExpressFactory.threadLocalExpress(advice).bind(Constants.COST_VARIABLE, cost).is(conditionExpress);
}
protected Object getExpressionResult(String express, Advice advice, double cost) throws ExpressException {
return ExpressFactory.threadLocalExpress(advice)
.bind(Constants.COST_VARIABLE, cost).get(express);
}
Практика экспрессии
Группу Arthas часто спрашивают, как оцениваются перегруженные методы, не более чем условия оценки? Количество параметров, какой первый параметр? Тип возвращаемого значения и т. д. можно использовать в качестве условий для оценки. Первый абзац часов ниже — наблюдаемое значение, а последний абзац — оценка выражения, которая выполняется только при выполнении условия.
Длина входного параметра больше 0
watch com.wangji92.arthas.plugin.demo.controller.CommonController traceE '{params,returnObj,throwExp}' -n 5 -x 3 'params.length >0'
Возвращаемое значение — строка, а длина больше 5.
watch com.wangji92.arthas.plugin.demo.controller.CommonController traceE '{params,returnObj,throwExp}' -n 5 -x 3 'returnObj instanceof java.lang.String && returnObj.length>5'
Условное выражение + асинхронная задача
- Только в определенной сцене будет ошибка, как устранить ошибку?
- Как решить эту проблему, если она появляется только один или два раза в день?
Условные выражения в основном используются для фильтрации. Например, некоторые сценарии появляются только в определенных параметрах, и ожидание может занять много времени. В настоящее время вы можете использовать условные выражения для фильтрации +асинхронная задачаДругие справочные блоги
5. открытые выражения
arthas.gitee.io/ognl.htmlИсходя из вышеизложенного, ognl всемогущ в наблюдении и отслеживании.ttОн также использует выражения ognl для выполнения логики. @xxxClas@xxxStaticField — это синтаксический сахар ognl для статических переменных. Взгляните на официальную документацию. Для специального использования OGNL, пожалуйста, обратитесь к:GitHub.com/Alibaba/art…
получить статическую переменную
Поскольку статическая переменная может быть загружена несколькими загрузчиками классов в jvm, jvm считает, что экземпляр загружается загрузчиком классов, поэтому вам необходимо знать хэш-значение текущего статического класса (sc -d com.wangji92.arthas.plugin .demo.controller.StaticTest ) можно получить с помощью этой команды.
ognl -x 3 '@com.wangji92.arthas.plugin.demo.controller.StaticTest@INVOKE_STATIC_DOUBLE' -c e374b99
вызвать весенний метод?
watch выполняет метод получения контекста spring в синтаксисе ognl, а затем вызывает bean-компонент
watch -x 3 -n 1 org.springframework.web.servlet.DispatcherServlet doDispatch '@org.springframework.web.context.support.WebApplicationContextUtils@getWebApplicationContext(params[0].getServletContext()).getBean("commonController").getRandomInteger()'
ognl выполняет статический контекст пружины, а затем вызывает метод бобов
ognl -x 3 '#springContext=@com.wangji92.arthas.plugin.demo.common.ApplicationContextProvider@context,#springContext.getBean("commonController").getRandomInteger()' -c e374b99
Нет чувства взлета, всемогущего! Предпосылка заключается в том, что вы должны освоить простым синтаксисом Ognl!
6. Готово
Для устранения неполадок онлайн, я чувствую, что этих команд вам достаточно, и есть некоторые другие декомпиляция, график пламени, .. временной туннель, модификация уровня логгера, информация о среде jvm и т. д. Я чувствую, что выше нет частоты. в конце концов, информация jvm имеет специальный мониторинг ~ даже без артаса вы можете найти более качественные инструменты для анализа стека, отказа jvm.
Некоторые особые пользовательские случаи стоит изучить и обдумать:GitHub.com/Alibaba/art…
законченный? А? Я не могу запомнить так много команд, а какой-то расширенный синтаксис ognl холоден ... Что, если я позволю вам получить все переменные среды Spring? Я недостаточно испытал эти две команды, трассировка и просмотр? Более продвинутый позвольте мне, как быть хорошим! Хорошо, см. ниже.
2. Расширенный
помещение
Предпосылка состоит в том, что у вас есть общее представление об arthas, основные команды имеют небольшую концепцию, и вы можете понять простой синтаксис ognl.Будут использоваться простые условные выражения. У нас было столько заказов от Артаса раньше, что надо запомнить маленькую книжку! Чувствуешь себя некомфортно и хочется плакать~ Не волнуйся, брат Ван решит твою проблему!
В настоящее время официальные инструменты Arthas недостаточно просты.Необходимо запомнить некоторые команды, особенно некоторые сложные синтаксис с сильной расширяемостью.Например, ognl может получить контекст весны и делать все, что вы хотите.Наблюдение и трассировка недостаточно просты. Вам нужно создать некоторую информацию о командном инструменте, поэтому все, что вам нужно, это плагин, который может просто обрабатывать строковую информацию. При решении онлайн-задач вам нужны самые быстрые и удобные команды, поэтому плагин arthas idea по-прежнему имеет значение и ценность.
arthas idea plugin
Смысл этого плагина не в том, чтобы решать вопросы на уровне протокола.Основная проблема заключается в решении проблемы генерации команд, так как проект управляется в идее, если вы думаете о том, какой класс вы хотите смотреть, этот плагин это знает и помогает вам строить команды более удобно и быстро. Используйте плагин arthas idea Это нужно понимать! В основном решите проблему того, как вы строите команду!Подробнее Посмотреть документацию
решенная проблема
- Проблема вариационной приоритетной среды
- получить статическую переменную
- Интеграция графа пламени
- интеграция команды регистратора
- Декомпилировать интеграцию
- трассировка -E интеграция
- интеграция
...... В основном все, что вы можете увидеть на артах, интегрировано в это! Ищите идею искусства прямо в идее, чтобы установить ее.
Общие проблемы специального использования
статическая переменная
Вы можете получить ognl напрямую
ognl -x 3 '@com.wangji92.arthas.plugin.demo.controller.StaticTest@INVOKE_STATIC_DOUBLE' -c e374b99
Можно получить по часам (курсор стоит на поле)
watch com.wangji92.arthas.plugin.demo.controller.StaticTest * '{params,returnObj,throwExp,@com.wangji92.arthas.plugin.demo.controller.StaticTest@INVOKE_STATIC_DOUBLE}' -n 5 -x 3 '1==1'
Общие переменные
Он может быть получен через Spring Context.getBean (). Поле (это необходимо настроить статический контекст пружины, см. Документацию)
тт и смотреть тоже можно~ Тот же принцип
ognl -x 3 '#springContext=@com.wangji92.arthas.plugin.demo.common.ApplicationContextProvider@context,#springContext.getBean("staticTest").filedValue' -c e374b99
смотреть, чтобы получить его и разместить его на поле
watch com.wangji92.arthas.plugin.demo.controller.StaticTest * '{params,returnObj,throwExp,target.filedValue}' -n 5 -x 3 'method.initMethod(),method.constructor!=null || !@java.lang.reflect.Modifier@isStatic(method.method.getModifiers())'
Значение выбранного элемента конфигурации
springContext.getEnvironment() (это для настройки статического контекста Spring, см. документацию)
ognl -x 3 '#springContext=@com.wangji92.arthas.plugin.demo.common.ApplicationContextProvider@context,#springContext.getEnvironment().getProperty("custom.name")' -c e374b99
Получить значение всех элементов конфигурации
Также возможно, чтобы часы получали контекст пружины tt и static~ Тот же принцип
watch -x 3 -n 1 org.springframework.web.servlet.DispatcherServlet doDispatch '#springContext=@org.springframework.web.context.support.WebApplicationContextUtils@getWebApplicationContext(params[0].getServletContext()),#allProperties={},#standardServletEnvironment=#propertySourceIterator=#springContext.getEnvironment(),#propertySourceIterator=#standardServletEnvironment.getPropertySources().iterator(),#propertySourceIterator.{#key=#this.getName(),#allProperties.add(" "),#allProperties.add("------------------------- name:"+#key),#this.getSource() instanceof java.util.Map ?#this.getSource().entrySet().iterator.{#key=#this.key,#allProperties.add(#key+"="+#standardServletEnvironment.getProperty(#key))}:#{}},#allProperties'
видео
Если вам интересно, вы можете посмотреть видео ~ Работа более плавная, и в основном нет необходимости что-либо запоминать.Arthas Приступая к освоению лучших практик
3. Еще
Если вы хотите узнать больше о плагине arthas-idea-plugin, вы можете связаться со мной.Вы можете щелкнуть правой кнопкой мыши, чтобы просмотреть arthas-idea-help, чтобы найти адрес кода и документацию по использованию, и, что более важно, упомяните хорошую идею, чтобы сделать использование Arthas более удобно. ! Адрес плагина:plugins.jet brains.com/plugin/1358…
Arthas Call для бумаг в полном разгаре
Артас держит звонок для бумаг, если у вас есть:
- Устранение неполадок с Артасом
- Интерпретация исходного кода Артаса
- Сделать предложение Артасу
- Не ограничено, другой контент, связанный с Артасом
Приглашаем принять участие в писательской деятельности, и есть призы, которые можно выиграть~Нажмите, чтобы отправить
"Облачная нативная платформа AlibabaСосредоточьтесь на микросервисах, бессерверных технологиях, контейнерах, Service Mesh и других технических областях, сосредоточьтесь на популярных тенденциях облачных технологий и практиках крупномасштабного внедрения облачных технологий, а также станьте официальной учетной записью самых облачных разработчиков. "