Monitorowanie aplikacji JEE

Report
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

similar documents