Декомпиляция Java-методов на продуктивном приложении под нагрузкой – миф или реальность?

Тестирование, несомненно, является одним из китов, на которых стоит разработка приложений. Как и любой характерный кит, тестирование может зафонтанировать багами и долго не останавливаться. Но главный вопрос заключается в достаточности тестового покрытия — все ли баги по написанным тест-кейсам удастся отловить? Возможно, некоторые появятся только под пользовательской нагрузкой. Для выявления оных, как правило, детонирует обращение пользователя и далее задействуется следующая цепная реакция: специалист Help Desk, вторая линия поддержки и, если повезет, сообщение о нештатной работе попадет в руки разработчика. Да, инцидент может также прийти от системы APM-мониторинга (если она у вас есть, конечно). Но все эти вещи не позволят однозначно определить, какие значения принимали переменные до возникновения исключения. В посте мы как раз поговорим о решении, призванном в помогать в подобных ситуациях.

d22e96e361ad37bc2a1a1b430e9f1c68.jpg

Устраивайтесь поудобнее. Поговорим об OverOps — решении для обнаружения ошибок в работе приложений на Java, Scala, Clojure и Groovy. Покажу несколько скриншотов и расскажу об основных фичах продукта. Во вступительной части не случайно шла речь о тестировании. Ошибки. возникающие в продуктивной среде совсем не обязательно появятся в среде разработки и тестирования. А нагрузка реальной пользовательской активностью может выдать доселе невиданные исключения.

383f5f3a604cd0cc3174928f438e045a.jpg

Суть работы OverOps в следующем:

1) при старте JVM рядом с ней запускается агент OverOps;
2) агент умеет мониторить возникновение в коде исключений (как обрабатываемых, так и не обрабатываемых);
3) агент в момент возникновения исключения снимает heapdump и накладывает его на декомпилированный байткод.

В итоге можно увидеть, какие значения принимали переменные до момента возникновения исключения. При работе агента вендор заявляет его максимальный overhead в 3%. На нашем лабораторном стенде при небольшой нагрузке приблизиться к этому показателю очень сильно не удалось, поэтому пока верим на слово.

Уж не знаю кому как, но мне особое удовольствие доставляют монстры, которые периодически мелькают то там, то сям в интерфейсе. Оказывается, у OverOps есть целый монстрический набор, отдельные представители которого материализуются при возникновении соответствующих ошибок. Забавно, да?

baf88654b2c4fa6cc17ffc6c31362f6a.jpg

В самом интерфейсе это выглядит примерно так:

bfb191c3decbfa141cb3dab2d4ab2424.jpg

Система собирает снапшоты на периодической основе (т.е. мы увидим не все ошибки, но увидим их количество). Можно создавать правила, например,»10 ошибок такого-то типа»: «сообщи туда-то» («заведи баг в Jira», «черкани в Slack», «запости в Твиттер» и т.д.). Полный список интеграций можно посмотреть по ссылке.

Вот пример моей тестовой интеграции с NewRelic. Детали отображаются на вкладке Plugins и сопровождаются прямой ссылкой в OverOps, что, прямо скажу, весьма удобно:

d9785faf3b2f7f4dbeec8b62c81d83d2.jpg

OverOps умеет фильтровать сторонние библиотеки на предмет исключения их из мониторинга. В самом интерфейсе это выглядит как-то так:

5be660aa43939a920770082b7809eb73.jpg

Еще из функциональных возможностей: присоединение исходного кода извне, фильтрация ошибок, если в них содержатся персональные данные (настраивается через регулярные выражения). Из небольших минусов: не умеют показывать тип объекта, если он был унаследован от базового типа, а сигнатура метода принимает базовый тип.

По типу инсталляции решения предоставляются все возможные сценарии: SaaS, Hybrid, On-Premise.

Сейчас уже, конечно, поздновато говорить о том, что в высокий сезон OverOps был бы очень кстати — ведь именно в периоды повышенной нагрузки есть большие шансы отловить разные ошибки, которые в другое время себя никак не проявляли. Но к следующим праздникам и релевантной им пиковой посещаемости все же стоит задуматься о тщательном мониторинге вашей ритейл-системы. Пожалуйста, обращайтесь с вопросами в комментариях. А если задача требует чуть более вдумчивого подхода, наш консалтинг он, как свет в окошке в пургу и вьюгу, — всегда появляется в нужный момент.

Автор статьи: Антон Касимов, архитектор систем управления

Комментарии (0)

© Habrahabr.ru