Wir unterstützen...

Elterninitiative Kinderkrebsklinik e.V

Kinderkrebsklinik e.V

Sponsoren

Wir danken unseren Sponsoren:

Permanente Sponsoren

Uni Düsseldorf
(Raum und Beamer)


(Preise)


(Preise)


(Preise)


(Preise)

Mitgliedschaften



java.net Member

Events

Nachlese: Sagt mein Profiler die Wahrheit? | Print |
Written by Philip Höfges   
Friday, 22 August 2014 09:22

>> Folien auf Speakerdeck

>> Video

Trotz der langen Sommerpause fanden sich über 80 interessierte Zuhörer im Hörsaal 5B ein, um dem Vortrag von Fabian Lange zum Thema „Profiling“ zu lauschen. Der Web- und Performance-Spezialist von codecentric gewinnt, trotz leichter technischer Schwierigkeiten mit dem Mikrofon, mit einem Beispielprogramm, welches Zeichenketten erzeugen soll. Bei zwei verschiedenen Durchläufen bricht das Programm aber an zwei unterschiedlichen Stellen ab. Wie kommt so etwas zustande? Und wie findet der Kopf vor dem Bildschirm dies heraus? Genaue dafür wurde Profiler entwickelt.

In Java gibt es einige Werkzeuge, wie Mission Control, die die JVM nutzen und Profiling betreiben. Fabian Lange stellt diese in einer kurzen Historie vor und nutzt ein Zitat von Heisenberg, um zu verdeutlichen, dass jede Messung den Code beeinflusst. Zur Veranschaulichung dieser These beschreibt er einige Fehlerquellen beim Profiling:

Der so genannte „Overhead“ ist nicht präzise angegeben. Man kann nicht genau sagen, dass ein Analyseprogramm beispielsweise einen Overhead von zehn Prozent hat, ohne zu wissen, wie lange das zu analysierende Programm eigentlich braucht. Oftmals ist sogar der Speicher sehr knapp, was dazu führt, dass die Daten, die bei der Analyse gesammelt wurden, nicht gespeichert und somit ausgewertet werden können. Ein weiteres Problem stellt die Genauigkeit dar. Wie kann sagen, etwas sei genau? Es gibt Werte, die man nicht mit dem Begriff der Genauigkeit angeben kann, da sie nicht messbar sind. Beispielsweise kann man sich zwar die Zeit am Telefon ansagen lassen, die Zeit, welche man braucht, um einen Knopf an der Mikrowelle nach Beenden des Gesprächs zu drücken ist dabei nicht messbar. Weiterhin nennt Fabian Lange das Problem der Zeitangabe. Man muss zwischen CPU-Zeit und realer Zeit differenzieren. Realzeit lässt sich zwar sehr präzise messen, z.B. mit einer Uhr an der Wand, aber die Zeit, die eine CPU für eine Instruktion braucht, ist nur zwar genau feststellbar. Und was macht man mit großen Datenmengen? Fabian Lange vertritt die Ansicht, dass es wesentlich sinnvoller ist, sich auf kleine Daten, welche schneller auswertbar sind, zu verlassen, als in einem riesigen Paket von Daten zu suchen.

Im Profiling gibt es zwei klassiche Herangehensweisen: Das Sampling und die Instrumentierung. Während beim Sampling in regelmäßigen Abständen der Zustand des Programms eingefangen wird, verändert der Benutzer bei der Instrumentierung den zu messenden Code zu Einfügen von Zusatzcode, um an genau diesen Stellen das Programm zu messen. Zur Veranschaulichung hat Fabian Lange selbstgeschriebene Beispiele vorbereitet. Anhand derer kann man sehr deutlich sehen, dass Sampling zwar die Laufzeit des Programms nicht erhöht, jedoch nicht so viele Daten liefert wie die Instrumentierung.

Anhand einer Demonstration mit dem Tool „Hprof“ stellt Fabian Lange anschließend die Unterschiede zwischen den verschieden Version von Java heraus. Trotz eines identischen Programms liefern die Versionen 6, 7 und 8 von Java bei der Auswertung der Profiling-Daten unterschiedliche Ergebnisse.

In einer Zusammenfassung zeigt Fabian Lange, was für den Zuschauer hängen bleiben sollte. Die zentrale Aussage ist, dass Profiling keine Garantie bietet. Der Profiler kann nicht immer genau festhalten, an welcher Stelle des Programms der Fehler auftritt. Die letztendliche Verbesserung muss vom Anwender kommen. Zusammenfassend ist die Frage, ob ein Profiler die Wahrheit sagt, mit „Nein“ zu beantwortet.

Im Anschluss an den Vortrag wurde bei Freibier sehr angeregt über das Thema diskutiert.