monitoring and optimization of java applications (ukrainian)

39
МОНІТОРИНГ ТА ОПТИМІЗАЦІЯ JAVA-ЗАСТОСУНКІВ , @by_mamagaga @anxolerd 21 грудня 2016

Upload: oleksandr-kovalchuk

Post on 15-Apr-2017

168 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Monitoring and Optimization of Java Applications (Ukrainian)

МОНІТОРИНГ ТАОПТИМІЗАЦІЯ

JAVA-ЗАСТОСУНКІВ, @by_mamagaga @anxolerd

21 грудня 2016

Page 2: Monitoring and Optimization of Java Applications (Ukrainian)
Page 3: Monitoring and Optimization of Java Applications (Ukrainian)

ЧАСТИНА 1.ОГЛЯД ТИПОВИХ ПРОБЛЕМ ТАСПОСОБІВ ЇХ ОПТИМІЗАЦІЇ

Page 4: Monitoring and Optimization of Java Applications (Ukrainian)

Deadlock — взаємне блокуваня, яке приводить дозависання програми.

Page 5: Monitoring and Optimization of Java Applications (Ukrainian)

ТИПОВИЙ ПРИКЛАДclass T1 extends Thread { @Override public void run() { // ... lockA.lock(); lockB.lock(); // Critical section lockB.unlock(); lockA.unlock(); // ... } }

class T2 extends Thread { @Override public void run() { // ... lockB.lock(); lockA.lock(); // Critical section lockA.unlock(); lockB.unlock(); // ... } }

Page 6: Monitoring and Optimization of Java Applications (Ukrainian)

ЯК БОРОТИСЯ З DEADLOCKSРетельно проектувати застосунокЗвертати особливу увагу на взаємодію потоків

Page 7: Monitoring and Optimization of Java Applications (Ukrainian)

ВИТОКИ ПАМ'ЯТІ

Memory leak — процес неконтрольованого зменшенняоб'єму пам'яті комп'ютера, пов'язаний з помилками впрограмах, які вчасно не звілняють вже не потрібні

ділянки пам'яті.

Page 8: Monitoring and Optimization of Java Applications (Ukrainian)

СТВОРЕННЯ ОБ'ЄКТІВ У ЦИКЛІclass InLoopCreator { public static void main(String[] args){ // ... for (Object o : collection) { // Note that a new checker instance // will be created on each iteration Checker c = new Checker(); if (c.check(o)) { process(o); } } // ... }}

Page 9: Monitoring and Optimization of Java Applications (Ukrainian)

НЕВИКОРИСТАННЯ ПАТТЕРНІВclass DwarfNPC { byte[] texture; // ...

DwarfNPC() { // ...

// Note that we load the same texture // for every single instance this.texture = FileLoader.load("assets/textures/dwarf");

// ... }}

Page 10: Monitoring and Optimization of Java Applications (Ukrainian)

ЗАВАНТАЖЕННЯ УСЬОГО І ОДРАЗУclass GreedyLoader { List<World> worlds = new ArrayList<World>();

GreedyLoader() { // ... for (String resourceUrl : resourceList) { World world = World.fromResource(resourceUrl); worlds.add(world); } // ... }

// Worlds are used sequentially public World getNextWorld() { /* ... */ }

}

Page 11: Monitoring and Optimization of Java Applications (Ukrainian)

НЕВИВАНТАЖЕННЯ РЕСУРСІВclass HeavyTaskProcessor { Resources resources;

void processWithResources() { resources = load(resources); // Do processing }

void processWithoutResources1() {} void processWithoutResources2() {} void processWithoutResources3() {} void processWithoutResources4() {}

// ... }

Page 12: Monitoring and Optimization of Java Applications (Ukrainian)

ВАЖКІ SQL-ЗАПИТИ

Page 13: Monitoring and Optimization of Java Applications (Ukrainian)

ОЧІКУВАННЯ-- Easy SELECT * FROM "user" WHERE id = 42;

-- Normal SELECT boss.* FROM "user" JOIN "user" AS boss ON boss.id = "user".boss_id WHERE "user".role = 'employee';

Page 14: Monitoring and Optimization of Java Applications (Ukrainian)

РЕАЛЬНІСТЬSELECT cl.* FROM client cl JOIN company ON cl.company_id = cl.id JOIN service_record sr ON sr.company_id = company.id JOIN binding_record br ON br.client_id = cl.ud WHERE br.valid_since < now() - INTERVAL '42 days' AND (sr.invoice_id IS NULL OR sr.upgrade_invoice_id IS NULL) AND sr.id IN (SELECT id FROM services WHERE price > 0) AND NOT EXISTS ( SELECT 1 FROM binding_record br2 WHERE br2.valid_since > br.valid_since AND br2.client_id = br.client_id AND br2.status IN (1,2,5,6) )

Page 15: Monitoring and Optimization of Java Applications (Ukrainian)

СТРАТЕГІЇ ВИРІШЕННЯПроходити по базі частинамиРозбити запит на декілька меншихВиконувати фільтрацію на стороні застосункуОптимізовувати сам запит

Page 16: Monitoring and Optimization of Java Applications (Ukrainian)

ПРОХОДИТИ ПО БАЗІ ЧАСТИНАМИString q = "select * from big_table"; // ... ResultSet rs = stmt.executeQuery(q); process(rs);

String q = "select * from big_table limit=? offset=?"; PreparedStatement st = con.prepareStatement(q);

while (true) { st.setLong(0, limitValue); st.setLong(1, offsetValue);

ResultSet rs = stmt.executeQuery(q); if (rs.isBeforeFirst()) { // result is not empty process(rs); offsetValue = offsetValue + limitValue; } else { break; }}

Page 17: Monitoring and Optimization of Java Applications (Ukrainian)

РОЗБИТИ ЗАПИТ НА ДЕКІЛЬКА МЕНШИХSELECT * FROM table_name WHERE (table_name.column1 = 'group1' and table_name.some_value > 10) or ( table_name.column1 = 'group2' and table_name.some_value < 2 and table_name.some_other_value > 13 ) ;

-- QUERY 1 SELECT * FROM table_name WHERE table_name.column1 = 'group1' AND table_name.some_value > 10;

-- QUERY 2 SELECT * FROM table_name WHERE table_name.column1 = 'group2' AND table_name.some_value < 2 AND table_name.some_other_value > 13;

Page 18: Monitoring and Optimization of Java Applications (Ukrainian)

ВИКОНАТИ ФІЛЬТРАЦІЮ НА СТОРОНІЗАСТОСУНКУ

String q = "SELECT * FROM table_name WHERE column1 > 42"; ResultSet rs = conn.executeQuery(q); List<Entity> alist = parseRs(rs); for (Entity item : alist) { if (!someCondition(item)) { continue; } process(item); }

Page 19: Monitoring and Optimization of Java Applications (Ukrainian)

ОПТИМІЗУВАТИ ЗАПИТ

Використоувати індексиUNION ALL замість складних ORЗменшувати вибірку за допомогою CTE

Page 20: Monitoring and Optimization of Java Applications (Ukrainian)

ЧАСТИНА 2.МОНІТОРИНГ ЗАСТОСУНКІВ

Page 21: Monitoring and Optimization of Java Applications (Ukrainian)

JMX

Page 22: Monitoring and Optimization of Java Applications (Ukrainian)

Java Management Extensions (JMX) — технологія Java,що призначена для контролю та керування

застосунками, системними об'єктами, пристроями(напр. принтерами) та комп'ютерними мережами. Даніресурси представляються у вигляді MBean-об'єктів

(Managed Bean)

Page 23: Monitoring and Optimization of Java Applications (Ukrainian)
Page 24: Monitoring and Optimization of Java Applications (Ukrainian)
Page 25: Monitoring and Optimization of Java Applications (Ukrainian)
Page 26: Monitoring and Optimization of Java Applications (Ukrainian)

ДЕМО

Page 27: Monitoring and Optimization of Java Applications (Ukrainian)

JMC

Page 28: Monitoring and Optimization of Java Applications (Ukrainian)

Java Mission Control (JMC) — набір утиліт длякерування, моніторингу та профілювання Java-

застосунків. Входить до складу Oracle JDK з версії 7u40.Складається із JMX консолі та Java Flight Recorder

Page 29: Monitoring and Optimization of Java Applications (Ukrainian)

ДЕМО

Page 30: Monitoring and Optimization of Java Applications (Ukrainian)

КОРИСНІ ПОСИЛАННЯОфіційна сторінкаДемонстрація можливостей JMCВступ до Java Mission Control

Page 31: Monitoring and Optimization of Java Applications (Ukrainian)

LOGS (ELK)

Page 32: Monitoring and Optimization of Java Applications (Ukrainian)

ElasticsearchLogstashKibana

Page 33: Monitoring and Optimization of Java Applications (Ukrainian)

ДЕМОPublic Kibana instance

Page 34: Monitoring and Optimization of Java Applications (Ukrainian)

КОРИСНІ ПОСИЛАННЯOSDN2016 - TARAS FILIPOV - СОВРЕМЕННЫЕСРЕДСТВА АНАЛИЗА ЛОГОВВстановлення ELK стеку

Page 35: Monitoring and Optimization of Java Applications (Ukrainian)

JAVA MELODY

Page 36: Monitoring and Optimization of Java Applications (Ukrainian)

https://github.com/javamelody/javamelody/wiki

Page 37: Monitoring and Optimization of Java Applications (Ukrainian)

ДЕМО

Page 38: Monitoring and Optimization of Java Applications (Ukrainian)

ДЯКУЄМО, ЩОДОСЛУХАЛИ ДО

КІНЦЯ)

Page 39: Monitoring and Optimization of Java Applications (Ukrainian)