SlideShare a Scribd company logo
Работа с легаси системами
Стабилизация, мониторинг, менеджмент
Докладчики: Дмитрий Куперман, Егор Волков
Дата: 3.09.2016
План
1. Что такое легаси - осмысление
2. Что с этим всем делать - подходы
3. А руками - девелоперские практики
4. Как это менеджить - приёмы управления легаси проектами
5. Да ладно, не всё так плохо - примеры весёлого кода
6. Примеры оптимизации - что стоит попробовать
7. Мониторинг приложений - JavaMelody
8. Мониторинг приложений - логи и ELK (ElasticSearch + Logstash + Kibana)
9. Мониторинг приложений - мониторинг и менеджмент JVM
2
Как работать с легаси и сохранить
психическое здоровье
Подходы, техники, примеры
Что такое легаси Дано:
1. Исто(е)рический код
2. Старые технологии
3. Неконсистентная архитектура
4. Недостаток или отсутствие документации
НО
5. ПРОДАКШН
a. Деньги
b. Надёжность (блажен кто верует)
c. Риски
Надо:
1. Разработка нового функционала
2. Багфиксинг
3. Стабилизация
4
Что с этим всем делать
1. Читать код (понять ход мыслей автора)
2. И смежный тоже
3. Докапываться до самой глубины (Call Hierarchy, Type
Hierarchy)
4. Дебажить, в том числе и либы, в том числе и
опенсорсные, которые потом, возможно, пересобирать
5. Искать старую докуметацию и носителей знаний
6. Документировать результаты своего reverse engineering-а
(flow diagrams, sequence diagrams)
a. Отдельные документы для технарей и бизнеса
b. Не забывать этой документацией пользоваться
5
А руками?
1. НЕ ПЕРЕПИСЫВАТЬ!
2. Реализовывать новый функционал. Писать консистентно с
существующим кодом
3. Отталкиваться от business value при оптимизации и
стабилизации.
4. Тестировать (manual + unit + automation)
5. Рефакторить, когда уже невмоготу или очень понемногу (тот
же business value)
6. Наладить взаимодействие с девопсами: релизная
процедура, outage alerting, отдельные environment-ы для
всего
7. Branching strategy
8. Code review and tools
6
Как это менеджить
1. Не всем девелоперам подходит
2. Тщательно подбирать команду по личностным
качествам - без чувства юмора и самоиронии
загнётесь. Без терпения - тоже.
3. Напоминать о всех вышеупомянутых техниках
4. Задавать дурные вопросы людям
5. Терпеливо объяснять новому менеджменту, что
“здесь так принято”
6. Выстроить процесс и следовать ему во избежание
увеличения энтропии
7. Оверэстимейтить - закладывать буферы на
сюрпризы (неочевидные зависимости - пример с
css)
8. Противостоять потоку бизнес-требований (баланс
бизнеса и стабилизации)
9. Вести technical debt
10. Отдельные маленькие проекты по стабилизации
11. Иметь SWAT-группу
7
Да ладно, не всё так плохо...
/**
* This is so wrong. This method, getInt, is
returning a long.
* This is required by some configuration
somewhere that uses autowire properties.
* Attempts to change this to an int return
value cause the application
* to fail on startup.
*/
public final long getInt(String str, int def)
generateItemList((DateTime) null,(DateTime) null);
Calendar.continuation_for_the_fucking_khtml_browser
= function() { ….. }
// (calendar.js from http://dynarch.com/jscal/)
8
Да ладно, не всё так плохо...
documentRow = new Chunk("Total:", new Font(bfVerdana, 8, Font.BOLD, COLOR_BLACK));
cell = new Cell(documentRow);
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setBorder(Rectangle.NO_BORDER);
cell.setLeading(8); // wysokosc
documentTable.addCell(cell);
documentRow = new Chunk("Remaining:", new Font(bfVerdana, 8, Font.BOLD, COLOR_BLACK));
cell = new Cell(documentRow);
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setBorder(Rectangle.NO_BORDER);
cell.setLeading(8); // wysokosc
documentTable.addCell(cell);
и так 95 раз…
9
Really? This can happen?
} catch(CustomValidationException cve) {
try {
servletResponse.sendError(HttpServletResponse.SC_BAD_REQUEST,
cve.getMessage());
} catch(IOException ioe) {
// really? this can happen? wtf am i supposed to do now? my whole server is
crashing.
LOGGER.warn("Unable to send error response!", ioe);
}
10
Примеры оптимизации
1. Уход от ежедневных рестартов
2. Добавление скриптов,
перезапускающих Эйры - антипаттерн
3. Уход от Зукипера
4. Переход на sessionless BFM
5. Переход на Sabre Orchestrated API
6. Slow SQL queries
7. Проход по всем логам и составление
prodLogExceptions эпика
8. Фикс багов заменой библиотек на новые
a. Spring -
org.springframework.http.MediaType
b. Jackson JSON DeSerializer в Java 7
9. Третьесторонние зависимости (frontend
(TWRS, CY, GTM, ATM), backend, dead links
scanning)
10. Cтабилизационный проект, внедрение
мониторинга JVM и аггрегации логов, о
чём ниже
11
Мониторинг Java-приложений
JavaMelody, ELK, etc.
Мониторинг приложения: JavaMelody
Что это?
JavaMelody - это инструмент для мониторинга Java-
приложений (спасибо, Кэп!).
Интегрируется либо в application server, либо в ваш
application.
В реальном времени собирает метрики:
1. CPU usage, RAM usage (Heap/Perm gen), Thread
count, HTTP activity;
2. MySQL connections, transactions per minute, running
queries, min/max query time, статистика самых
популярных и самых медленных запросов
(проксирование JDBC драйвера);
3. Thread info in details: какие потоки, что делают,
какой код их вызвал;
4. Hibernate L2 cache: посмотреть какой кеш, где, что
в нём и (при необходимости) грохнуть его;
5. Логи: самые популярные entry, сортировка по типу;
6. System load, disc usage, free disc space, etc.
13
Мониторинг приложения: JavaMelody
1. Real-time application health monitoring (is it dead yet?);
2. Возможность быстро реагировать на outage’ы и решать
сиюминутные проблемы;
3. Логи не всегда показывают всю картину произошедшего,
можно посмотреть что было с приложением в
определённый момент времени;
4. Возможность предусмотреть многие проблемы ещё до
того, как сработает dev-ops alerting (он же у вас есть,
правда?);
5. Графики более наглядны для менеджеров и прочих
бизнесов;
6. Легче ответить на вопросы клиента а-ля “почему мы
потеряли много килобаксов денег?”;
7. Дев-опсы скажут вам спасибо!
Зачем мне всё это?
14
Мониторинг приложения: JavaMelody
Threads
Memory
1. Видна нагрузка на сервер
2. Пики (очевидно) в вечернее время.
1. “Пила” показывает как приложение ест
память, можно копать глубже
2. Кореллирует по времени с GC-graph’
ом
3. Проседания справа - деплойменты
15
Мониторинг приложения: JavaMelody
Web Server Administration Server
16
Что это и зачем мне это?
Elasticsearch + Logstash + Kibana - стек
технологий для аггрегации, анализа и
визуализации данных из логов.
1. Статистические данные в реальном
времени из логов приложения;
2. Настраиваемые выборки под
конкретные условия и ситуации;
3. Ещё больше цветастых графиков,
понятных даже вашему менеджеру;
4. Полезно не только с технической
стороны, но и со стороны бизнеса;
5. Лишний повод привести в порядок
логгирование в вашем приложении;
Мониторинг приложения: Логи и ELK
17
Мониторинг приложения: Логи и ELK - бизнес
18
Мониторинг приложения: Логи и ELK - девелопер
19
Мониторинг приложения: JMC, MAT, VisualVM...
Кто все эти люди?
1. Java Mission Control (Starting with the release of
Oracle JDK 7 Update 40 (7u40), Java Mission
Control is bundled with the HotSpot JVM),Flight
Recorder requires commercial license;
2. Heap Dump Memory Analyzer Tool и
-XX:+HeapDumpOnOutOfMemoryError, для
случаев, когда “Что упало - то пропало” нас не
устраивает;
3. VisualVM (since JDK version 6, update 7);
4. Solaris Studio Performance Analyzer (linux
and solaris only);
20
Time for an update!
А давайте обновим фреймворки!
1. Обновление JDBC-драйвера, Tomcat
threadpool’а и прочих штук - полезно;
2. Неочевидные изменения под капотом
фреймворков могут привести к конфликтам
библиотек;
3. “Работает - не трогай!” не всегда
справедливо;
4. Отдельная история с application server’ами и
версией Java - ВНИМАТЕЛЬНО читать
change-log’и;
21
Полезные ссылки
Victor Polischuk. Legacy Projects. How To Win The Race.
http://jeeconf.com/archive/materials-2014/legacy-projects/
Michael Feathers. Working Effectively with Legacy Code
http://www.slideshare.net/nashjain/working-effectively-with-legacy-code-presentation
22
Вопросы
23
Спасибо за внимание!
24

More Related Content

PDF
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
PDF
Никита Галкин "Ловушки микросервисной архитектуры"
PDF
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
PPTX
5 особенностей при вводе в эксплуатацию веб приложения
PDF
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
PDF
SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...
PPT
Let's Talk About Junit 5
PDF
Стачка 2017: Golang – опыт промышленной разработки
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
Никита Галкин "Ловушки микросервисной архитектуры"
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
5 особенностей при вводе в эксплуатацию веб приложения
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...
Let's Talk About Junit 5
Стачка 2017: Golang – опыт промышленной разработки

What's hot (16)

PPTX
Нагрузочное тестирование по-живому
PDF
Логгирование. Зачем? Когда? Сколько?
PPTX
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
PPTX
Интернет-магазин на javascript
PPT
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
PPTX
Валерий Блонский (Казахстан), PACIFICA. Как угнать Ботнет
PPTX
Software Testing
PPTX
Agile Vector - внедрение agile разработки в Райффайзенбанке
PPTX
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
PDF
Скажи мне правду, Scrum, когда тестировать нам?
PPTX
Наталья Медведева - Тестировщик на все руки в Scrum-команде
PDF
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
PDF
HappyDev-lite-2016-осень, день 2 01 Денис Нелюбин. Жизнь после релиза
PDF
Валерий Боронин (Россия), Positive Technologies. SSDL для руководителей: как ...
PPTX
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
PPTX
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Нагрузочное тестирование по-живому
Логгирование. Зачем? Когда? Сколько?
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Интернет-магазин на javascript
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
Валерий Блонский (Казахстан), PACIFICA. Как угнать Ботнет
Software Testing
Agile Vector - внедрение agile разработки в Райффайзенбанке
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
Скажи мне правду, Scrum, когда тестировать нам?
Наталья Медведева - Тестировщик на все руки в Scrum-команде
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
HappyDev-lite-2016-осень, день 2 01 Денис Нелюбин. Жизнь после релиза
Валерий Боронин (Россия), Positive Technologies. SSDL для руководителей: как ...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Ad

Similar to Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, management (20)

PDF
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
PDF
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
PDF
Нюансы запуска приложений в Kubernetes
PPTX
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
PPTX
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
PDF
Разговор про Java 9. Extended version
PDF
Построение систем автоматического протоколирования Си/Си++ кода
PPTX
Dz Java Hi Load 0.4
PDF
PPT
Реверс-инжиниринг требований в проекте по миграции КИС. Алексей Смирнов
PPTX
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
PDF
ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!
PDF
[jeeconf-2011] Java Platform Performance BoF
PPTX
дерюшкин Agile vector
PPTX
Расширяемая платформа для создания и управления автоматизированными тестами н...
PDF
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
ODP
Java 9 - кратко о новом
PDF
D2D Pizza JS Илья Беда "Куда мы все катимся?"
PPTX
Software craftsmanship #5 кэши и микросервисы
PPT
михаил сухов (мегаплан) мобильные приложения мегаплана от 0 до 100%
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Нюансы запуска приложений в Kubernetes
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
Разговор про Java 9. Extended version
Построение систем автоматического протоколирования Си/Си++ кода
Dz Java Hi Load 0.4
Реверс-инжиниринг требований в проекте по миграции КИС. Алексей Смирнов
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
ITGM8. Илья Коробицын (Grid Dinamics) Автоматизатор, копай глубже, копай шире!
[jeeconf-2011] Java Platform Performance BoF
дерюшкин Agile vector
Расширяемая платформа для создания и управления автоматизированными тестами н...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Java 9 - кратко о новом
D2D Pizza JS Илья Беда "Куда мы все катимся?"
Software craftsmanship #5 кэши и микросервисы
михаил сухов (мегаплан) мобильные приложения мегаплана от 0 до 100%
Ad

More from Аліна Шепшелей (20)

PDF
Vladimir Lozanov How to deliver high quality apps to the app store
PDF
Oleksandr Yefremov Continuously delivering mobile project
PDF
Alexander Voronov Test driven development in real world
PDF
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
PDF
Valerii Iakovenko Drones as the part of the present
PDF
Valerii Moisieienko Apache hbase workshop
PDF
Anton Ivinskyi Application level metrics and performance tests
PDF
Миша Рыбачук Что такое дизайн?
PDF
Макс Семенчук Дизайнер, которому доверяют
PDF
Anton Parkhomenko Boost your design workflow or git rebase for designers
PDF
Andrew Veles Product design is about the process
PDF
Kononenko Alina Designing for Apple Watch and Apple TV
PDF
Mihail Patalaha Aso: how to start and how to finish?
PDF
Gregory Shehet Undefined' on prod, or how to test a react app
PDF
Alexey Osipenko Basics of functional reactive programming
PDF
Vladimir Mikhel Scrapping the web
PDF
Roman Ugolnikov Migrationа and sourcecontrol for your db
PDF
Dmutro Panin JHipster
PDF
Alex Theedom Java ee revisits design patterns
PDF
Alexey Tokar To find a needle in a haystack
Vladimir Lozanov How to deliver high quality apps to the app store
Oleksandr Yefremov Continuously delivering mobile project
Alexander Voronov Test driven development in real world
Vitalii Bondarenko HDinsight: spark. advanced in memory big-data analytics wi...
Valerii Iakovenko Drones as the part of the present
Valerii Moisieienko Apache hbase workshop
Anton Ivinskyi Application level metrics and performance tests
Миша Рыбачук Что такое дизайн?
Макс Семенчук Дизайнер, которому доверяют
Anton Parkhomenko Boost your design workflow or git rebase for designers
Andrew Veles Product design is about the process
Kononenko Alina Designing for Apple Watch and Apple TV
Mihail Patalaha Aso: how to start and how to finish?
Gregory Shehet Undefined' on prod, or how to test a react app
Alexey Osipenko Basics of functional reactive programming
Vladimir Mikhel Scrapping the web
Roman Ugolnikov Migrationа and sourcecontrol for your db
Dmutro Panin JHipster
Alex Theedom Java ee revisits design patterns
Alexey Tokar To find a needle in a haystack

Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, management

  • 1. Работа с легаси системами Стабилизация, мониторинг, менеджмент Докладчики: Дмитрий Куперман, Егор Волков Дата: 3.09.2016
  • 2. План 1. Что такое легаси - осмысление 2. Что с этим всем делать - подходы 3. А руками - девелоперские практики 4. Как это менеджить - приёмы управления легаси проектами 5. Да ладно, не всё так плохо - примеры весёлого кода 6. Примеры оптимизации - что стоит попробовать 7. Мониторинг приложений - JavaMelody 8. Мониторинг приложений - логи и ELK (ElasticSearch + Logstash + Kibana) 9. Мониторинг приложений - мониторинг и менеджмент JVM 2
  • 3. Как работать с легаси и сохранить психическое здоровье Подходы, техники, примеры
  • 4. Что такое легаси Дано: 1. Исто(е)рический код 2. Старые технологии 3. Неконсистентная архитектура 4. Недостаток или отсутствие документации НО 5. ПРОДАКШН a. Деньги b. Надёжность (блажен кто верует) c. Риски Надо: 1. Разработка нового функционала 2. Багфиксинг 3. Стабилизация 4
  • 5. Что с этим всем делать 1. Читать код (понять ход мыслей автора) 2. И смежный тоже 3. Докапываться до самой глубины (Call Hierarchy, Type Hierarchy) 4. Дебажить, в том числе и либы, в том числе и опенсорсные, которые потом, возможно, пересобирать 5. Искать старую докуметацию и носителей знаний 6. Документировать результаты своего reverse engineering-а (flow diagrams, sequence diagrams) a. Отдельные документы для технарей и бизнеса b. Не забывать этой документацией пользоваться 5
  • 6. А руками? 1. НЕ ПЕРЕПИСЫВАТЬ! 2. Реализовывать новый функционал. Писать консистентно с существующим кодом 3. Отталкиваться от business value при оптимизации и стабилизации. 4. Тестировать (manual + unit + automation) 5. Рефакторить, когда уже невмоготу или очень понемногу (тот же business value) 6. Наладить взаимодействие с девопсами: релизная процедура, outage alerting, отдельные environment-ы для всего 7. Branching strategy 8. Code review and tools 6
  • 7. Как это менеджить 1. Не всем девелоперам подходит 2. Тщательно подбирать команду по личностным качествам - без чувства юмора и самоиронии загнётесь. Без терпения - тоже. 3. Напоминать о всех вышеупомянутых техниках 4. Задавать дурные вопросы людям 5. Терпеливо объяснять новому менеджменту, что “здесь так принято” 6. Выстроить процесс и следовать ему во избежание увеличения энтропии 7. Оверэстимейтить - закладывать буферы на сюрпризы (неочевидные зависимости - пример с css) 8. Противостоять потоку бизнес-требований (баланс бизнеса и стабилизации) 9. Вести technical debt 10. Отдельные маленькие проекты по стабилизации 11. Иметь SWAT-группу 7
  • 8. Да ладно, не всё так плохо... /** * This is so wrong. This method, getInt, is returning a long. * This is required by some configuration somewhere that uses autowire properties. * Attempts to change this to an int return value cause the application * to fail on startup. */ public final long getInt(String str, int def) generateItemList((DateTime) null,(DateTime) null); Calendar.continuation_for_the_fucking_khtml_browser = function() { ….. } // (calendar.js from http://dynarch.com/jscal/) 8
  • 9. Да ладно, не всё так плохо... documentRow = new Chunk("Total:", new Font(bfVerdana, 8, Font.BOLD, COLOR_BLACK)); cell = new Cell(documentRow); cell.setHorizontalAlignment(Element.ALIGN_RIGHT); cell.setBorder(Rectangle.NO_BORDER); cell.setLeading(8); // wysokosc documentTable.addCell(cell); documentRow = new Chunk("Remaining:", new Font(bfVerdana, 8, Font.BOLD, COLOR_BLACK)); cell = new Cell(documentRow); cell.setHorizontalAlignment(Element.ALIGN_RIGHT); cell.setBorder(Rectangle.NO_BORDER); cell.setLeading(8); // wysokosc documentTable.addCell(cell); и так 95 раз… 9
  • 10. Really? This can happen? } catch(CustomValidationException cve) { try { servletResponse.sendError(HttpServletResponse.SC_BAD_REQUEST, cve.getMessage()); } catch(IOException ioe) { // really? this can happen? wtf am i supposed to do now? my whole server is crashing. LOGGER.warn("Unable to send error response!", ioe); } 10
  • 11. Примеры оптимизации 1. Уход от ежедневных рестартов 2. Добавление скриптов, перезапускающих Эйры - антипаттерн 3. Уход от Зукипера 4. Переход на sessionless BFM 5. Переход на Sabre Orchestrated API 6. Slow SQL queries 7. Проход по всем логам и составление prodLogExceptions эпика 8. Фикс багов заменой библиотек на новые a. Spring - org.springframework.http.MediaType b. Jackson JSON DeSerializer в Java 7 9. Третьесторонние зависимости (frontend (TWRS, CY, GTM, ATM), backend, dead links scanning) 10. Cтабилизационный проект, внедрение мониторинга JVM и аггрегации логов, о чём ниже 11
  • 13. Мониторинг приложения: JavaMelody Что это? JavaMelody - это инструмент для мониторинга Java- приложений (спасибо, Кэп!). Интегрируется либо в application server, либо в ваш application. В реальном времени собирает метрики: 1. CPU usage, RAM usage (Heap/Perm gen), Thread count, HTTP activity; 2. MySQL connections, transactions per minute, running queries, min/max query time, статистика самых популярных и самых медленных запросов (проксирование JDBC драйвера); 3. Thread info in details: какие потоки, что делают, какой код их вызвал; 4. Hibernate L2 cache: посмотреть какой кеш, где, что в нём и (при необходимости) грохнуть его; 5. Логи: самые популярные entry, сортировка по типу; 6. System load, disc usage, free disc space, etc. 13
  • 14. Мониторинг приложения: JavaMelody 1. Real-time application health monitoring (is it dead yet?); 2. Возможность быстро реагировать на outage’ы и решать сиюминутные проблемы; 3. Логи не всегда показывают всю картину произошедшего, можно посмотреть что было с приложением в определённый момент времени; 4. Возможность предусмотреть многие проблемы ещё до того, как сработает dev-ops alerting (он же у вас есть, правда?); 5. Графики более наглядны для менеджеров и прочих бизнесов; 6. Легче ответить на вопросы клиента а-ля “почему мы потеряли много килобаксов денег?”; 7. Дев-опсы скажут вам спасибо! Зачем мне всё это? 14
  • 15. Мониторинг приложения: JavaMelody Threads Memory 1. Видна нагрузка на сервер 2. Пики (очевидно) в вечернее время. 1. “Пила” показывает как приложение ест память, можно копать глубже 2. Кореллирует по времени с GC-graph’ ом 3. Проседания справа - деплойменты 15
  • 17. Что это и зачем мне это? Elasticsearch + Logstash + Kibana - стек технологий для аггрегации, анализа и визуализации данных из логов. 1. Статистические данные в реальном времени из логов приложения; 2. Настраиваемые выборки под конкретные условия и ситуации; 3. Ещё больше цветастых графиков, понятных даже вашему менеджеру; 4. Полезно не только с технической стороны, но и со стороны бизнеса; 5. Лишний повод привести в порядок логгирование в вашем приложении; Мониторинг приложения: Логи и ELK 17
  • 19. Мониторинг приложения: Логи и ELK - девелопер 19
  • 20. Мониторинг приложения: JMC, MAT, VisualVM... Кто все эти люди? 1. Java Mission Control (Starting with the release of Oracle JDK 7 Update 40 (7u40), Java Mission Control is bundled with the HotSpot JVM),Flight Recorder requires commercial license; 2. Heap Dump Memory Analyzer Tool и -XX:+HeapDumpOnOutOfMemoryError, для случаев, когда “Что упало - то пропало” нас не устраивает; 3. VisualVM (since JDK version 6, update 7); 4. Solaris Studio Performance Analyzer (linux and solaris only); 20
  • 21. Time for an update! А давайте обновим фреймворки! 1. Обновление JDBC-драйвера, Tomcat threadpool’а и прочих штук - полезно; 2. Неочевидные изменения под капотом фреймворков могут привести к конфликтам библиотек; 3. “Работает - не трогай!” не всегда справедливо; 4. Отдельная история с application server’ами и версией Java - ВНИМАТЕЛЬНО читать change-log’и; 21
  • 22. Полезные ссылки Victor Polischuk. Legacy Projects. How To Win The Race. http://jeeconf.com/archive/materials-2014/legacy-projects/ Michael Feathers. Working Effectively with Legacy Code http://www.slideshare.net/nashjain/working-effectively-with-legacy-code-presentation 22