SlideShare une entreprise Scribd logo
1  sur  47
ШЕФ, ВСЕ ПРОПАЛО 
Проблемы с Production 
Антон Семаник 
Владимир Малинин
О докладчиках 
Антон Семаник 
Nix Solutions Ltd. 
Java Developer, Group Lead 
Legacy code fan =))) 
Владимир Малинин 
Nix Solutions Ltd. 
Java Developer, Group Lead
С чего всё начинается? 
Рано или поздно разрабатываемое нами приложение 
попадает на Production… 
И именно в этот момент 
начинается всё самое 
интересное: 
Другая среда… 
Другие нагрузки… 
Реальные пользователи…
Проблема: 
• Приложение регулярно падает 
• Заказчики бьют тревогу 
• Сроки поджимают 
• В чем проблема не понятно 
• Все пропало!
Что мы имеем на входе? 
Обычно не очень детальное описание проблемы от заказчиков, 
но с требованием поправить и поскорее. 
…надцати мегабайтный файл с логами за последний месяц (если 
повезёт, то за день). 
Мысль о том, что это происходит явно не по нашей вине.
Что же делать в таком случае? 
Существует как минимум два варианта: 
• Поддаться общей панике и идти искать решение в Google, 
надеясь на удачу; 
• Провести детальный анализ приложения в поисках проблемы.
Следуя по пути анализа, нужно: 
• Попытаться воспроизвести поведение локально; 
• Проанализировать логи приложения; 
• Поискать проблемы в коде; 
• Посмотреть на работающее приложение изнутри 
используя профилировщик; 
• Собрать статистику потоков / памяти / соединений к 
базе.
Какие инструменты нам могут 
помочь? 
Профилировщики: 
• jconsole 
• VisualVM 
• Jprofiler 
• YourKit 
Более продвинутые средства: 
• JavaMelody
Ограничения профилировщиков 
• Невозможно держать его открытым 24 
часа в сутки 7 дней в неделю, не всегда 
доступны требуемые порты на сервере 
• Невозможно предсказать когда в 
приложении возникнет проблема 
• Для сбора статистики нужно 
изобретать дополнительные грабли
Рассмотрим проблему на примере 
реального проекта: 
С регулярностью ~2 недели с приложением начинались 
проблемы: 
• Статические страницы отдавались сервером без проблем 
• Все страницы запрашивающие информацию из базы 
отдавались сервером как 504 Gateway Timeout
Конфигурация приложения: 
Spring 3 
Hibernate 3.5 
BoneCP 0.8 
СУБД MySQL 
Apache tomcat 6 + Nginx proxy
Что нам было нужно: 
Мощный но легковесный инструмент для мониторинга и 
сбора статистики, которым можно использовать на 
Production
К чему мы пришли: 
В результате поисков был найден инструмент полностью 
удовлетворяющий всем требованиям - JavaMelody
Преимущества JavaMelody 
• Может работать на QA и Production 
• Легко встраивается в готовое приложение 
• Позволяет анализировать: 
1. Использование памяти 
2. JDBC соединения и SQL запросы 
3. HTTP 
4. MBeans 
• Представляет информацию наглядно, в виде графиков 
Недостатки JavaMelody 
• Если приложение упало, то JavaMelody тоже будет 
недоступен 
• Графики не всегда информативны 
• Нельзя указать интервал просмотра статистики менее 1-го дня
Настройка JavaMelody 
Добавляем зависимость в pom.xml 
<dependency> 
<groupId>net.bull.javamelody</groupId> 
<artifactId>javamelody-core</artifactId> 
<version>1.50.0</version> 
</dependency> 
Добавляем фильтр в web.xml 
<filter> 
<filter-name>monitoring</filter-name> 
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class> 
</filter> 
<filter-mapping> 
<filter-name>monitoring</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 
<listener> 
<listener-class>net.bull.javamelody.SessionListener</listener-class> 
</listener> 
Добавляем дополнительный конфиг для поддержки Spring: 
<context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value> 
classpath:net/bull/javamelody/monitoring-spring.xml 
/WEB-INF/applicationContext.xml 
</param-value> 
</context-param>
На что стоит обратить внимание:
Использование памяти (хорошо):
Использование памяти (плохо):
Открытые JDBC соединения (хорошо):
Открытые JDBC соединения (плохо):
BoneCP через MBeans: 
Соединения берутся из pool’a но не возвращаются назад.
Открытые JDBC соединения: 
На протяжение длительного времени соединения остаются открытыми. 
Наблюдается утечка JDBC соединений.
Класс-источник проблемы:
Источник проблемы: 
Отсутствующая @Transactional аннотация. После её 
добавления проблема утечки JDBC соединений исчезла.
Проект 2
Конфигурация приложения: 
Spring 3 
Hibernate 3.5 
BoneCP 0.8 
СУБД Postgres 
Apache tomcat 6 + Nginx proxy
Проект2
Статистика из JavaMelody
Статистика используемой 
памяти
Статистика http сессий
Что же делать дальше? 
Пофикси приложение!
Воспроизвести проблему локально 
JMeter parameters:
Проблема 1: Незакрытые соединения 
ConnectionWatcher
Проблема 1: Незакрытые соединения
Проблема1: Незакрытые соединения
Проблема1: Незакрытые соединения 
Результат работы анализатора логов
Победа?!
Что, опять?
Статистика используемой 
памяти
Проблема2: “Тяжелые” запросы
Проблема2: “Тяжелые” запросы
Проблема2: “Тяжелые” запросы
Проблема2: “Тяжелые” запросы 
Проанализировать модель данных 
- на предмет Eager/Lazy fetchType 
- разбить сложные тяжеловесные запросы на более 
мелкие/быстрые 
- класть в модель только необходимые данные
Пофиксили!
Если беда: 
1. Hе паниковать 
2. Собрать и проанализировать статистику 
3. Проанализировать логи на предмет ошибок. 
4. Воспроизвести проблему локально 
5. Локализовать и пофиксить проблему 
6. Пофиксить попутные баги
Спасибо за внимание! 
Вопросы?

Contenu connexe

Tendances

Ошибки начинающего специалиста по нагрузочному тестированию и как их избежать
Ошибки начинающего специалиста по нагрузочному тестированию и как их избежатьОшибки начинающего специалиста по нагрузочному тестированию и как их избежать
Ошибки начинающего специалиста по нагрузочному тестированию и как их избежатьSQALab
 
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...SQALab
 
Всевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и Grafana
Всевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и GrafanaВсевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и Grafana
Всевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и GrafanaSQALab
 
Шаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптовШаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптовSQALab
 
Тестируем производительность с помощью Selenium
Тестируем производительность с помощью SeleniumТестируем производительность с помощью Selenium
Тестируем производительность с помощью SeleniumSQALab
 
Организация процесса ручного тестирования
Организация процесса ручного тестированияОрганизация процесса ручного тестирования
Организация процесса ручного тестированияIT61
 
Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинНейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинPositive Hack Days
 
Redux и изоморфные приложения
Redux и изоморфные приложенияRedux и изоморфные приложения
Redux и изоморфные приложенияJohn Wezel
 
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in netAlex Tumanoff
 
Ядро автоматизации под микро-сервисную архитектуру
Ядро автоматизации под микро-сервисную архитектуруЯдро автоматизации под микро-сервисную архитектуру
Ядро автоматизации под микро-сервисную архитектуруSQALab
 
Один за всех, или как помочь тестированию многих компонентов одной системы
Один за всех, или как помочь тестированию многих компонентов одной системыОдин за всех, или как помочь тестированию многих компонентов одной системы
Один за всех, или как помочь тестированию многих компонентов одной системыSQALab
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииCEE-SEC(R)
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Anton Vidishchev
 
Настраиваемое тестирование производительности
Настраиваемое тестирование производительностиНастраиваемое тестирование производительности
Настраиваемое тестирование производительностиSQALab
 
WP как экспериментальная платформа
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформаSQALab
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgIT61
 
Павел Степанов
Павел СтепановПавел Степанов
Павел СтепановSQALab
 
Тестирование доступности ПО для людей с ограниченными возможностями
Тестирование доступности ПО для людей с ограниченными возможностямиТестирование доступности ПО для людей с ограниченными возможностями
Тестирование доступности ПО для людей с ограниченными возможностямиSQALab
 
GUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioGUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioSQALab
 

Tendances (19)

Ошибки начинающего специалиста по нагрузочному тестированию и как их избежать
Ошибки начинающего специалиста по нагрузочному тестированию и как их избежатьОшибки начинающего специалиста по нагрузочному тестированию и как их избежать
Ошибки начинающего специалиста по нагрузочному тестированию и как их избежать
 
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
 
Всевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и Grafana
Всевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и GrafanaВсевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и Grafana
Всевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и Grafana
 
Шаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптовШаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптов
 
Тестируем производительность с помощью Selenium
Тестируем производительность с помощью SeleniumТестируем производительность с помощью Selenium
Тестируем производительность с помощью Selenium
 
Организация процесса ручного тестирования
Организация процесса ручного тестированияОрганизация процесса ручного тестирования
Организация процесса ручного тестирования
 
Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинНейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
 
Redux и изоморфные приложения
Redux и изоморфные приложенияRedux и изоморфные приложения
Redux и изоморфные приложения
 
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in net
 
Ядро автоматизации под микро-сервисную архитектуру
Ядро автоматизации под микро-сервисную архитектуруЯдро автоматизации под микро-сервисную архитектуру
Ядро автоматизации под микро-сервисную архитектуру
 
Один за всех, или как помочь тестированию многих компонентов одной системы
Один за всех, или как помочь тестированию многих компонентов одной системыОдин за всех, или как помочь тестированию многих компонентов одной системы
Один за всех, или как помочь тестированию многих компонентов одной системы
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3
 
Настраиваемое тестирование производительности
Настраиваемое тестирование производительностиНастраиваемое тестирование производительности
Настраиваемое тестирование производительности
 
WP как экспериментальная платформа
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформа
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
 
Павел Степанов
Павел СтепановПавел Степанов
Павел Степанов
 
Тестирование доступности ПО для людей с ограниченными возможностями
Тестирование доступности ПО для людей с ограниченными возможностямиТестирование доступности ПО для людей с ограниченными возможностями
Тестирование доступности ПО для людей с ограниченными возможностями
 
GUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioGUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test Studio
 

Similaire à ThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с Production

Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтендViacheslav Slinko
 
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Ontico
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)guest40e031
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Serversrit2010
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...HappyDev
 
Как сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с AgileКак сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с AgileAlexey Krivitsky
 
Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика SQALab
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended versionIvan Krylov
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаRoman Dvornov
 
Опыт разработки мобильных приложений в Applifto
Опыт разработки мобильных приложений в AppliftoОпыт разработки мобильных приложений в Applifto
Опыт разработки мобильных приложений в AppliftoAnatoly Sharifulin
 
2014-09-06 01 Анна Тарасенко. Стажировка-2014, ретроспектива
2014-09-06 01 Анна Тарасенко. Стажировка-2014, ретроспектива2014-09-06 01 Анна Тарасенко. Стажировка-2014, ретроспектива
2014-09-06 01 Анна Тарасенко. Стажировка-2014, ретроспективаОмские ИТ-субботники
 
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...Ontico
 
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)Ontico
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинOntico
 
AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...
AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...
AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...JSC “Arcadia Inc”
 
Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчейVitebsk DSC
 
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»SpbDotNet Community
 

Similaire à ThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с Production (20)

Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтенд
 
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
Intro
IntroIntro
Intro
 
Как сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с AgileКак сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с Agile
 
Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Опыт разработки мобильных приложений в Applifto
Опыт разработки мобильных приложений в AppliftoОпыт разработки мобильных приложений в Applifto
Опыт разработки мобильных приложений в Applifto
 
2014-09-06 01 Анна Тарасенко. Стажировка-2014, ретроспектива
2014-09-06 01 Анна Тарасенко. Стажировка-2014, ретроспектива2014-09-06 01 Анна Тарасенко. Стажировка-2014, ретроспектива
2014-09-06 01 Анна Тарасенко. Стажировка-2014, ретроспектива
 
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
 
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей Шетухин
 
It meetup cd
It meetup cdIt meetup cd
It meetup cd
 
AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...
AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...
AzovDevMeetup 2016 | Zero downtime — как релизить продукт миллионам пользоват...
 
Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчей
 
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
 

ThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с Production