вопрос
Компания взяла на себя вторичный проект Spring Cloud по разработке и обслуживанию, и exception.msg() был напечатан при выводе журнала исключений, но вывода не было.e.printStackTrace()
Например, я бросилNullPointException
, он выводитjava.lang.NullPointerException
, эта строка сообщает об ошибке, но не выводит. Поскольку код находится в сети, в отличие от тестовой среды, код можно обновлять по желанию. В этот моментarthas
на поле.
Источник Артаса
Arthas
даAlibaba
Открытый исходный кодJava
Диагностический инструмент, любимый разработчиками.Arthas
является открытым исходным кодом в ИнтернетеJava
Инструмент диагностики, использующий интерактивный режим командной строки, поддерживаетweb
Терминальная онлайн-диагностика, предоставляя при этом множествоTab
Функция автозаполнения еще больше облегчает обнаружение и диагностику проблемы. выгода отArthas
Мощные и богатые функции, пустьArthas
То, что можно сделать, выходит за рамки воображения.
Какие проблемы могут решить Arthas
Из какого пакета jar загружается этот класс? Почему сообщается о различных исключениях, связанных с классом?
Почему код, который я изменил, не выполняется? Это потому, что я не совершал? Ветвь неправильная?
Если вы столкнулись с проблемой и не можете отладить ее онлайн, можете ли вы опубликовать ее повторно, только добавив журнал?
Есть проблема с обработкой данных пользователя онлайн, но ее нельзя отладить онлайн или воспроизвести офлайн!
Есть ли глобальный вид, чтобы увидеть работоспособность системы?
Есть ли способ отслеживать рабочее состояние JVM в реальном времени?
Как быстро найти горячие точки приложения и сгенерировать график пламени?
как установить артас
скачатьarthas-boot.jar
, затем используйтеjava -jar
Способ начать:
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
общие команды артаса
dashboard
Панель данных в режиме реального времени текущей системы, нажмите Ctrl + C для выхода.
При работе на Ali-tomcat он будет отображать информацию о текущем коте в режиме реального времени, такую как количество запросов HTTP qps, rt, количество ошибок, информацию о пуле потоков и так далее.
thread
Просмотр информации о текущем потоке, просмотр стека потока
Поддерживает отображение одним щелчком N самых загруженных в данный момент верхних потоков и стеков печати:
$ thread -n 3
thread -b, узнать, какой поток в данный момент блокирует другие потоки
$ thread -b
Обратите внимание, что в настоящее время поддерживается только поиск потока, заблокированного ключевым словом synchronized, если это java.util.concurrent.Lock, он еще не поддерживается.
watch
Позволяет легко наблюдать за вызовом указанного метода. Наблюдаемый диапазон: возвращаемое значение, генерируемое исключение, входной параметр и проверка соответствующей переменной путем написания выражения OGNL.
часы имеют больше параметров, в основном потому, что они могут наблюдать за объектами в 4-х разных сценах
имя параметра | Параметр Описание |
---|---|
class-pattern | совпадение выражения имени класса |
method-pattern | совпадение выражения имени метода |
express | смотреть выражение |
condition-express | условное выражение |
[b] | существуетперед вызовом методаНаблюдаемый |
[e] | существуетпосле исключения методаНаблюдаемый |
[s] | существуетПосле возврата методаНаблюдаемый |
[f] | существуетПосле окончания метода(нормальный возврат и аномальный возврат) наблюдение |
[E] | Включить сопоставление регулярных выражений, по умолчанию используется сопоставление с подстановочными знаками. |
[x:] | Указывает глубину обхода атрибута выходного результата, по умолчанию 1 |
Соблюдайте параметры метода и возвращаемые значения
$ $ watch com.slf.arthas.controller.DemoController login '{params,returnObj,throwExp}' -n 5 -x 3
Пример наблюдения аномальной информации
$ watch demo.MathGame primeFactors "{params[0],throwExp}" -e -x 2
jad
Декомпилировать исходный код указанного загруженного класса
Команда jad декомпилирует байт-код класса, реально работающего в JVM, в java-код, что удобно вам для понимания бизнес-логики;
- В Arthas Console декомпилированный исходный код имеет подсветку синтаксиса, что облегчает его чтение.
- Конечно, в декомпилированном java-коде могут быть синтаксические ошибки, но это не влияет на ваше понимание прочитанного.
имя параметра | Параметр Описание |
---|---|
class-pattern | совпадение выражения имени класса |
[c:] |
Хэш-код ClassLoader, которому принадлежит класс |
[classLoaderClass:] |
Указывает имя класса ClassLoader, который выполняет выражение |
[E] | Включить сопоставление регулярных выражений, по умолчанию используется сопоставление с подстановочными знаками. |
скомпилировать java.lang.String
jad java.lang.String
Декомпилировать указанную функцию
jad demo.MathGame main
онлайн-учебник Артаса:art has.aliyun.com/doc/art has-…
Слева туториал, справа можно вводить команды
Научите вас шаг за шагом, попробуйте прямо сейчас.
возникшие проблемы
pid не найден, jps не установлен
Причина: Centos устанавливает open-jdk и не устанавливает команду jps
Решение: вам необходимо установить пакет java-1.X.X-openjdk-devel, который предоставляет инструмент jps.
Запрос
yum list | grep jdk-devel
Установить
yum install java-1.8.0-openjdk-devel.x86_64