Analyse des Java Heaps

Werbung
Analyse des Java Heaps
C-Basierter Java Agent
Agenda
Ausgangslage
Lösungsansatz
Grobplanung
Ausgangslage
Aktuell Verwendung der Java
Agent Schnittstelle
Core JVM Informationen dadurch
kaum bis schwer zugänglich
Ab Java 5.0 helfen hierbei
teilweise die JMX Beans
Wenige Memory Informationen
sind dadurch abrufbar
 Direkter Zugriff auf den Heap ist
aber nicht möglich für eine
detaillierte Memory-Analyse
Was wird benötigt?
Zugriff auf den Heap über die
JVMPI (alt) / JVMTI (neu)
Schnittstelle
 Dies ist nur mit einem nativen Cbasierten Agenten möglich
Viele der Aufgaben des Java
Agenten müssen fortan vom Cbasierten übernommen werden
 Fokus kann nicht zu 100% auf
Heap-Analyse gelegt werden,
daher sehr zeit- und ressourcenintensiv
Welche anderen Vorteile haben wir dadurch?
Java Basisklassen lassen sich mit dem aktuellen Ansatz
nicht instrumentieren (Collections, RMI, I/O, etc.)
Synchronization Bottlenecks können identifiziert werden
Garbage Collection Informationen direkt abrufbar
Detaillierte Thread Analysen möglich  Suchen von
Deadlocks etc.
JVM übergreifende Aufrufe (RMI (IIOP), WebServices,
JMS, etc) können getracked werden
Auslagerung der Instrumentierung zum zentralen Server
(dadurch Neu-Instrumentierung zur Laufzeit möglich)
wenig
Aktivität
Basisaktivitäten
Realisierung C
Agent
C Heap Sensor
Sendeeinheit C
Agent
hoch
sehr hoch
Aktivitäten / Aufwände
Aufwand
C/C++
Aufwand
Java / Rest
5
10
• Integration in JVMTI
• Einhängen ins Classloading
• Threading
• Framework, dass es ermöglicht
unterschiedliche Agenten zu integrieren
• Informationen welche Version bin ich > Aktivierung der passenden Sensoren
(ist das möglich?)
• Wie integriert sich ein C-Agent konkret
in die JVM
20
5
• Wie lese ich den Heap aus
• Heap müsste gestreamt (komprimiert?)
werden
10
0
• Anpassung Registrierungsprozess
• Definiton der unterschiedlichen Daten
• C Agenten
• Serialisierung / Deserialisierung
15
0
Beschreibung
• Projektdefinition(en)
• Definition unterstützter Systeme
• Anpassungen im Build/Release
C/C++
Java
Kenntnisse Kenntnisse
wenig
Aktivität
hoch
sehr hoch
Beschreibung
Aktivitäten / Aufwände
C/C++
Java
Kenntnisse Kenntnisse
Aufwand
C/C++
Aufwand
Java / Rest
10
5
0
10
Definition
Kommunikationsprotokoll
• Wie sieht das Protokoll aus, das wir
senden wollen
Umstellung des
Kommunikationsprotokolls auf
Socket auf dem
CMR
• Weg vom RMI hin zum definierten
Socketformat
• Serialisierung / Deserialisierung
Instrumentierung
und Identifikation
der Klassen auf
Serverseite
• Instrumentierung von gesendeten
Bytecode
• Integration von eindeutigen IDs
("Registrierung")
• Wie kann ich das Redefine der
Klassen ermöglichen?!
15
0
Kommunikation C
Basis <-> Java
Sensor
• Einige Sensoren können einfacher
direkt in Java realisiert werden (Timer,
Invocation Sequence, Exception
Sensor, ...)
• Wie kommunizieren diese Sensoren
ihre Daten an den CMR?
15
15
wenig
Aktivität
hoch
sehr hoch
Beschreibung
Aktivitäten / Aufwände
C/C++
Java
Kenntnisse Kenntnisse
Aufwand
C/C++
Aufwand
Java / Rest
Kommunikation
CMR -> Agent
• Beidseitige Kommunikationsrichtung
• Hauptsächlich für die Redefinition der
Klassen
10
10
Redefining von
Klassen
• Integration ins Userinterface
• Redefining ermöglichen auf
Serverseite (CMR)
• Agenten anpassen
10
10
Offene ungeklärte
technische
Probleme
• bspw. kann es vorkommen, dass die
JVM eine Klasse versucht zu laden, für
welche die Superklasse noch nicht
geladen ist
???
???
Konfigurationsinterface auf dem
Server
• Die Instrumentierung passiert auf dem
Server
• Deswegen muss hier die Konfiguration
vorhanden sein
• Steht aktuell in den Kinderschuhe
0
60
wenig
hoch
Aktivität
Anzeige der
Heapinformationen
sehr hoch
Beschreibung
• Heap wird höchstwahrscheinlich raw
übertragen (gestreamt)
• Aufbereitung hierfür ist notwendig
• Sinnvolle Darstellung hier notwendig
• Kommunikation zwischen Server und
Client
Projektleitung
Dokumentation
Gesamt
Aktivitäten / Aufwände
C/C++
Java
Kenntnisse Kenntnisse
Aufwand
C/C++
Aufwand
Java / Rest
0
20
0
20
10
10
120
175
= 295
Minimal Lösung
Kein Redefine von Klassen möglich (aber vorgesehen)
Reduziert Aufwand um ~30 PT
Ressourcenplanung
Erfahrener C-Entwickler absolut notwendig
Java Entwickler ideal
Unterstützung durch Bouillet/Siegl
Herunterladen