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