Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Monitorowanie i badanie wydajności aplikacji biznesowych bazujących na technologii Java EE Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 1 Plan prezentacji • Źródło problemu • • • • Technologia Java EE Monitorowanie aplikacji Java EE Problem i cel Założenia systemu monitorowania Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 2 Źródło problemu • System zapisów na egzaminy – Ograniczony dostęp do zasobów CK • Wymogi projektowe: – JSF/Facelets – WebServices (WS) – JDBC – Zapis informacji o działaniu aplikacji do dziennika zdarzeń • Problemy: – Wpływ zapisu informacji na pracę aplikacji – Powtórzenia kodu Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 3 Powtórzenia kodu • Uzyskanie/zwolnienie połączenia bazodanowego • Zwolnienie przygotowanych zapytań (ang. prepared statements) • Obsługa wyjątków • Zapis komunikatów do dzienników zdarzeń o: – Rozpoczęciu/zakończeniu działania metody WS – Rozpoczęciu/zakończeniu działania metod aplikacji JSF – Rzuconym wyjątku Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 4 Plan prezentacji • Źródło problemu • Technologia Java EE • Monitorowanie aplikacji Java EE • Problem i cel • Założenia systemu monitorowania Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 5 Ważniejsze technologie Java EE WEB JCA EJB JEE JPA/JTA JSR 299 JMS JAX-WS XML Contexts and Dependency Injection Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 7 Java EE – zarządzanie i monitorowanie Aplikacje Serwer aplikacji Java EE JVM •MBeans •MxBeans •Java Management eXtensions System operacyjny Sprzęt Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 8 Java EE – zarządzanie i monitorowanie Aplikacje Serwer aplikacji Java EE •Logger (java.util.Logger, log4j) •Narzędzie serwera aplikacyjnego •Konsola administracyjna JVM System operacyjny Sprzęt Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 9 Java EE – zarządzanie i monitorowanie Aplikacje Serwer aplikacji Java EE JVM •Logger (java.util.Logger, log4j) •Interceptory dla komponentów EJB •Filtry dla serwletów •ActionListener-y dla JSP/JSF •Metody cyklu życia komponentów •Matody cyklu życia encji •Dynamiczne proxy •Modyfikacja kodu binarnego •AspectJ •ASM System operacyjny Sprzęt Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 10 Źródła problemów Błędy w kodzie serwera aplikacji Błędy konfiguracji serwera aplikacji Błędy Błędy w kodzie aplikacji Błędy konfiguracji aplikacji Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 11 Plan prezentacji • Źródło problemu • Technologia Java EE • Monitorowanie aplikacji Java EE • Problem i cel • Założenia systemu monitorowania Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 12 Logger • Standardowy mechanizm pozwalający komunikaty do dziennika zdarzeń • Zalety: zapisywać – Poziomy - ograniczenie ilości informacji – Możliwość konfiguracji, włączania i wyłączania w locie • Wady: – Wymagane jest umieszczenie wywołań Logger-a w kodzie, przeważnie w kilku miejscach – Wpływa na wydajność działania aplikacji, nawet gdy jest wyłączony (test isLoggable). W przypadku konieczności zapisu dużej ilości informacji/konieczności jej wytworzenia wpływ może być nawet istotny Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 13 Logger – przykład public void usunTerminEgzaminu(Integer terminId) throws EgzaminyWyjatek { if (LOGGER.isLoggable(Level.FINER)) { LOGGER.entering(getClass().getName(), "usunTerminEgzaminu", terminId); } ... try { ... if (result == 0) { LOGGER.log(Level.SEVERE, "Nie udało się usunąć terminu egzaminu o id <" + terminId + ">"); throw new EgzaminyWyjatek(NIEUDANE_USUNIECIE_TERMINU); } } catch (SQLException e) { obslugaSqlException(e); } finally { zwolnijPolaczenie(connection); } if (LOGGER.isLoggable(Level.FINER)) { LOGGER.exiting(getClass().getName(), "usunTerminEgzaminu"); } } Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 14 JMX i MBeans • Management Beans • Standardowy mechanizm maszyny wirtualnej Java • Instalacja MBeans podczas uruchamiania aplikacji – Razem z aplikacją – Osobno ( w przypadku kontenerów aplikacyjnych) • Podobnie jak w przypadku logger-a, konieczne jest dodanie do kodu aplikacji instrukcji zapisujących informację w MBean-ach Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 15 JMX Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 16 JMX Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 17 JMX Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 18 MBean - przykład public class WsCounter implements WsCounterMBean{ private int counter=0; public int getWSCounter() { return counter; } public void incrementCounter() { counter++; } public void resetCounter() { counter=0;; } } Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 19 MBean - przykład • Uzyskaj dostęp do MBean ObjectName objectName =new ObjectName ("pl.performance:type=WsCounterMBean"); final MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer(); mbean=(WsCounterMBean) MBeanServerInvocationHandler. newProxyInstance(platformMBeanServer, objectName, WsCounterMBean.class,false); • Kiedy instalować MBean? • Java EE 6 – @Singleton – inicjalizacja parametrów dla aplikacji – Synchronizacja dostępu do sesyjnych komponentów typu singleton Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 20 Interceptory EJB • Narzędzie o największych możliwościach • Pełny dostęp do komponentu poprzez refleksję: – Pola – Metody, argumenty i wartości przez nie zwracane – Wyjątki – Adnotacje – Transakcje – Wątek w którym komponent się znajduje (komponenty EJB nie mogą być współdzielone przez wątki) • Implementowane poprzez: – Dynamiczne proxy (Glassfish) – Modyfikację kodu podczas ładowania (OpenEJB) Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 21 Interceptory EJB – przykład • Mierzenie czasu wykonania metody – Tworzenie przy pomocy adnotacji pułapek informujących o zbyt długim czasie wykonywania metody • Nazywanie wątków. – Domyślna nazwa nic nie mówi – Ułatwia także proces debug-owania Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 22 Interceptory EJB – przykład • Adnotacja @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Threshold {public int time();} • Komponent EJB @Stateless @Interceptors(ExecutionTime.class) public class BusinessComponent implements BusinessComponentRemote { @Threshold(time=5) public String monitoredMethod(String name) {...} @PostConstruct public void init(){...} } Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 23 Interceptory EJB – przykład • Interceptor public class ExecutionTime { @AroundInvoke Object measureExecutionTime(InvocationContext ic) throws Exception { long startTime = System.currentTimeMillis(); Method method = ic.getMethod(); try { return ic.proceed(); } finally { Threshold threshold = method.getAnnotation(Threshold.class); long endTime = System.currentTimeMillis() - startTime; if (threshold != null && endTime > threshold.time()) ... } } } Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 24 EJB Lifecycle Callback Event Handlers • Lifecycle callback handlers: – javax.annotation.PostConstruct – javax.annotation.PreDestroy – javax.ejb.PostActivate – javax.ejb.PrePassivate • Brak możliwości bezpośredniej komunikacji pomiędzy wywołaniami metod • Komunikacja przez pola komponentu EJB Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 25 SFSB (Stateful Session Bean) • javax.ejb.SessionSynchronization • Rozszerzenie cyklu dla komponentów stanowych – afterBegin – beforeCompletion/afterCompletion(true) – afterCompletion(false) • Transakcji nie da się monitorować interceptorem z uwagi na to, że on sam stanowi cześć transakcji. Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 26 JPA Lifecycle Callback Event Handlers Nie istnieje Object obj=new Object() Usunięcie w DB @PostRemove Nowy EntityManager.persist(obj) @PrePersist insert @PostPersist Odłączony EntityManager.remove(obj) @PreRemove Rozpoczęcie usuwania w DB Zarządzany @PreUpdate update @PostUpdate Usunięty EntityManager.refresh(obj) @PostLoad Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 28 Interceptory dla WS • Zależne od implementacji JAX-WS • Dla JAX-WS „Metro” jest to tzw. „tubeline assembler” • Typowy interceptor Serwer aplikacji Klienci WS Tube 1 Tube 2 Tube 3 Żądanie/Odpowiedź SOAP Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 29 Filtry i ActionListenery • Typowy interceptor @Override public void processAction(ActionEvent arg0) throws AbortProcessingException { try { ... super.processAction(arg0); ... } catch (Exception e) { ... LOGGER.log(Level.SEVERE, "WYJĄTEK APLIKACJI WEB", e); ... } } Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 30 Skoro jest tak dobrze, to dlaczego jest źle? Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 31 Problem i cel • Brak jednolitego mechanizmu pozwalającego monitorować aspekty działania aplikacji biznesowej w technologii Java EE • Stworzenie mechanizmu działającego z każdym typem komponentów technologii Java EE Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 32 Cechy poszukiwanego rozwiązania • Możliwość monitorowania (nawet zdalnego) działania aplikacji • Kod monitorujący nie powinien być częścią kodu logiki aplikacji – Instalacja razem z logiką aplikacji • Możliwość (zdalnego) włączania/wyłączania monitorowania aplikacji, bez konieczności jej przebudowy/przeładowania • Podczas budowy aplikacji kod monitorujący powinien podlegać testom !!! • Określenie obiektu monitorowania Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 33 Rozwiązania istniejące • Glassbox – Zestaw narzędziowy rozpoznający popularne framework-i – Osobna aplikacji instalowana na serwerze aplikacyjnym • AspectJ • JBoss AOP – Modyfikacja łańcucha interceptorów (Javassist) – Pracuje jako samodzielny kontener lub jako część JBossAS Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 34 Proces Nieprawidłowe działanie Mała wydajność Zbyt duża zajętość zasobów Trwale zablokowane wątki Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 36 Architektura i Projekt Jednostka instalacyjna JMS, JDBC, Mail Narzędzia Aplikacja Serwer aplikacyjny JVM JMX/JConsole Agent JMX MBeans Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 38 Tryb normalny pracy aplikacji Jednostka instalacyjna JMS, JDBC, Mail Klienci Narzędzia Aplikacja JVM JMX/JConsole Agent JMX MBeans Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 39 Włączenie monitorowania – Splatanie kodu • Podczas: – Kompilacji (Compile–time) – Ładowania klas (Class loading–time) – Działania (Run–time) • Uruchomienie narzędzia monitorującego powoduje wplecenie kodu narzędziowego w kod aplikacji • Punkty splatania identyfikowane są poprzez adnotacje Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 40 Tryb monitorowania pracy aplikacji Jednostka instalacyjna JMS, JDBC, Mail Klienci Narzędzia Aplikacja JVM JMX/JConsole Agent JMX MBeans Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 41 Przyszłość – Java EE6 i JSR299 • JBoss Seam (WebBeans) • JSR 299 - Contexts and Dependency Injection – Dekoratory – Interceptory • Zatarcie różnicy pomiędzy komponentem EJB a dowolnym innym bean-em zarządzanym, np. JSF Managed Beans Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 42 Podsumowanie • Monitorowanie selektywne • Możliwość „wyłączenia” kodu monitorującego podczas normalnej pracy – Szybsze działanie aplikacji – Zmniejszenie zajętości zasobów • Szybsze wywołanie kodu narzędziowego od techniki interceptorów EJB3 • Możliwość monitorowania dowolnego obiektu należącego do aplikacji Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 43 Czas na dyskusję i dziękuję za uwagę Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 44 Do sprawdzenia • • • • Hierarchia ładowania klas może stanowić problem. Dynamiczne proxy do przechwytywania wywołań APM – Application Perfomance Management W przypadku klastrowanych aplikacji przeładowanie aplikacji na węźle może nastąpić bez utraty dostępu do usług (ale trzeba to zrobić na wszystkich węzłach po kolei). Politechnika Łódzka Instytut Informatyki, Zakład Sieci Komputerowych 45