Arthas — Спасательный круг для Java-разработчика в продакшене

16 Jun, 2026
37,371
🔱 7,634
👥 1,106

Знакомая ситуация? Ваше Java-приложение отлично работает на тестовом стенде, но на продакшене начинает выдавать странные ошибки. Логи молчат или не дают полной картины. А самое неприятное — удаленная отладка запрещена или просто невозможна, потому что "замораживать" боевой сервис нельзя. Добавлять новые логи? Это целый цикл: разработка, тестирование, деплой... А проблема может быть плавающей и исчезнуть после перезапуска JVM.

Что же делать? Сдаваться и ждать, пока проблема проявится снова? К счастью, есть решение, которое может сэкономить вам часы, а то и дни мучений: Arthas – мощный инструмент диагностики для Java-приложений с открытым исходным кодом от Alibaba. Это ваш личный "рентген" для JVM, позволяющий заглянуть под капот работающего приложения без единой модификации кода и, что самое главное, без перезапуска сервера!

Arthas: Когда каждый перезапуск на вес золота

Arthas — это, по сути, JVM-агент, который подключается к работающему Java-процессу. Его главная фишка в том, что он работает в режиме наблюдателя, не приостанавливая потоки вашего приложения. Это критически важно для продакшена, где любая задержка или остановка может привести к финансовым потерям.

Кому это будет полезно? Любому Java-разработчику, девопсу, или SRE-инженеру, кто хоть раз сталкивался с необходимостью быстро диагностировать проблемы в production-среде. Arthas буквально позволяет вам "отлаживать на лету", получая исчерпывающую информацию о состоянии JVM и вашего кода.

Что умеет этот "волшебник"? Ключевые возможности Arthas

Arthas предлагает целый арсенал команд, которые превращают слепую отладку в полноценное расследование. Давайте рассмотрим самые полезные:

Реклама

1. Диагностика загрузки классов: sc и jad

Часто проблемы возникают из-за конфликтов версий библиотек или неправильной загрузки классов. Команда sc (search class) поможет найти загруженный класс, узнать, откуда он был загружен, и получить детальную информацию о его ClassLoader'е.

$ sc -d org.springframework.web.context.support.XmlWebApplicationContext

А если вам нужно убедиться, что код, который вы ожидаете, действительно выполняется, jad (decompile) мгновенно декомпилирует класс прямо в консоли. Это невероятно удобно для проверки "на лету" без поиска исходников или артефактов.

$ jad javax.servlet.Servlet

2. Мониторинг методов и стеков вызовов: stack, trace, watch, monitor

Это, пожалуй, одни из самых мощных инструментов для понимания поведения приложения.

  • stack: Позволяет увидеть стек вызовов для конкретного метода. Кто и откуда вызвал этот метод? stack даст ответ.
    $ stack test.arthas.TestStack doGet
    
  • trace: Идеально подходит для поиска "узких мест". trace показывает время выполнения каждого шага внутри метода, помогая выявить медленные подвызовы. Trace method invocation
  • watch: Позволяет отслеживать параметры, возвращаемые значения и исключения методов в реальном времени. Можно настроить фильтры, чтобы видеть только то, что вас интересует, например, только выброшенные исключения.
    $ watch test.arthas.TestWatch doGet {params[0], throwExp} -e
    
  • monitor: Если вам нужна статистика по вызовам метода (QPS, среднее время ответа, количество успешных/неуспешных вызовов), monitor соберет эти данные и будет выводить их с заданным интервалом.
    $ monitor -c 5 org.apache.dubbo.demo.provider.DemoServiceImpl sayHello
    

3. "Машина времени" для методов: tt (Time Tunnel)

Представьте, что вы можете вернуться в прошлое и посмотреть, с какими параметрами был вызван метод, какое значение вернул или какое исключение выбросил. Команда tt делает это возможным! Она записывает данные о вызовах методов, позволяя вам потом "переиграть" их. Это бесценно для анализа редких, невоспроизводимых багов.

$ tt -t org.apache.dubbo.demo.provider.DemoServiceImpl sayHello

4. Горячая замена кода: mc и retransform

О, да! Вы можете скомпилировать .java файл прямо в памяти (mc) и затем "перезагрузить" измененный .class файл в работающую JVM (retransform). Это позволяет исправить мелкие ошибки или добавить отладочную информацию без перезапуска приложения. Конечно, это не панацея для крупных изменений, но для быстрых фиксов на продакшене — просто спасение.

$ mc /tmp/Test.java
$ retransform /tmp/Test.class

5. Анализ производительности: dashboard и profiler

Arthas не только для отладки, но и для мониторинга. dashboard дает общую картину состояния JVM: потоки, CPU, память, GC. Arthas Dashboard А команда profiler позволяет собирать данные о CPU и генерировать Flame Graph, который наглядно покажет, где ваше приложение тратит больше всего времени.

$ profiler start
$ profiler stop

Flame Graph generated by profiler

Как начать работать с Arthas?

Все очень просто. Достаточно скачать arthas-boot.jar и запустить его:

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

Затем вы выбираете процесс Java, к которому хотите подключиться, и вуаля — у вас в руках мощнейший инструмент диагностики! Есть также скрипт as.sh для быстрой установки.

Практическое применение: Когда Arthas становится незаменимым

В моей практике я часто сталкивался с ситуациями, когда Arthas был просто спасением:

  • Медленные запросы: trace помог быстро найти метод, который тормозил обработку запроса, и понять, почему.
  • ClassCastException на продакшене: sc показал, что один и тот же класс был загружен разными ClassLoader'ами из разных JAR-файлов, что приводило к ошибке.
  • Неожиданное поведение метода: watch позволил увидеть входные параметры и возвращаемые значения в реальном времени, выявив некорректную логику.
  • Высокая загрузка CPU: thread -n 3 моментально показал, какие потоки потребляют больше всего CPU, и их стеки вызовов.
  • Утечки памяти, связанные с ClassLoader'ами: classloader команда помогла выявить и проанализировать иерархию ClassLoader'ов и их количество.

Arthas — это не просто набор утилит, это целый подход к диагностике, который позволяет быть проактивным и решать проблемы до того, как они станут критическими.

Выводы: Стоит ли попробовать Arthas?

Однозначно да! Если вы работаете с Java-приложениями, особенно в production-среде, и вам приходится сталкиваться с трудностями отладки, Arthas станет вашим незаменимым помощником. Он не только сэкономит ваше время и нервы, но и значительно повысит вашу эффективность в поиске и устранении проблем.

Забудьте о "черном ящике" на продакшене. С Arthas вы всегда будете знать, что происходит внутри вашей JVM. Он идеально подходит для:

  • Разработчиков, которым нужна глубокая интроспекция работающего кода.
  • SRE и DevOps инженеров, ответственных за стабильность и производительность систем.
  • Всех, кто хочет минимизировать время простоя и оперативно реагировать на инциденты.

Попробуйте Arthas, и вы удивитесь, насколько проще станет жизнь с Java на продакшене!

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.