Method Profiling (Grundlegende Ausführungszeit) mit Spring AOP

8

Ich bin auf der Suche nach einer Funktion oder Software, die mir erlauben wird, die Ausführungszeit meiner Methode einfach zu profilieren und auszuwählen, was nach Paketfilter zu profilieren ist.

Ich weiß, es ist Profiler 101. Ich benutze den TPTP Profiler. Aber ich bin nicht glücklich damit. Um ehrlich zu sein, verstehe ich einfach nicht, wie es funktioniert, und wenn ich meine Anwendung profiliere (starte den Server im Profiling-Modus), dauert es ewig, nichts zu tun. (naja, nicht was ich erwarte: eine einfache Ausgabe der Ausführungszeit)

Also mache ich das Profiling selbst mit der Systemzeit (füge eine Zeile am Anfang und am Ende der Methoden hinzu). Es ist nicht so schlecht.

Meine Frage ist: Ich möchte die Systemzeit vor und nach einem Methodenaufruf mit Spring AOP messen, können Sie mir die Richtung geben? Es ist eine gute / schlechte Idee? Die Codebasis ist ziemlich groß und wir haben nicht viele Komponententests, kann das nicht "gefährlich" sein?

Ich frage nicht nach Code, ich denke ich kann es selbst mit dieser Art von Link machen: Ссылка

Aber wenn Sie ein nettes Tutorial haben (noch nie AOP gemacht, nur das Konzept kennen), nehme ich es.

    
Antoine Claval 02.09.2009, 07:56
quelle

4 Antworten

13

Dafür gibt es eine eingebaute Unterstützung im Frühjahr.

Ich habe versucht, nach dem Tutorial zu suchen, aber überraschenderweise habe ich noch keins gefunden, also werde ich versuchen, es hier zu erklären. (BEARBEITEN: Ich habe dieses Beispiel meinem Blog hier hinzugefügt )

Im Grunde müssen Sie die CustomizableTraceInterceptor-Klasse folgendermaßen erweitern:

%Vor%

Diese Klasse umschließt Ihre Beans und gibt Methodenaufrufinformationen einschließlich Parameter, Rückgabewerte und Ausführungszeit an ein Protokoll aus. Durch Ändern der writeToLog() -Methode steuern Sie, wo und wie stark die Daten ausgegeben werden sollen.

Jetzt brauchen Sie etwas XML, um tatsächlich auszuwählen, welche Beans Sie umhüllen werden:

%Vor%

Grundsätzlich definieren Sie die Beans, die Sie in "beanNames" mit einem Platzhalter umbrechen möchten und "order" steuert die Reihenfolge des Umbruchs - wenn Sie keine anderen AOP-Klassen haben, können Sie sie entfernen. Sie können das Format der Ausgabe auch ändern, wenn Sie die Eigenschaften enterMessage und exitMessage ändern.

Das sollte genug sein, um Sie zu beginnen. Wenn Sie Fragen haben, zögern Sie nicht zu fragen.

    
Gregory Mostizky 02.09.2009, 08:23
quelle
1

Der AOP-Ansatz würde funktionieren, aber abhängig davon, wie Sie planen, die Informationen zu protokollieren, könnte sich die Leistung selbst beeinflussen. Beachten Sie dies, stellen Sie sicher, dass die Protokollierung so effizient wie möglich ist und stellen Sie sicher, dass Ihr Fehler bei der Verarbeitung berücksichtigt wird dein Aspekt.

Vielleicht möchten Sie auch als Visual VM aussehen - ich war von diesem Tool beeindruckt, es ist einfach zu bedienen und war in der Lage um mir genau die Informationen zu geben, die ich gebraucht habe, als ich sie zuletzt benutzt habe.

    
Nick Holt 02.09.2009 08:16
quelle
1

Neben VisualVM, das Nick als eine weitere gute (und für die Entwicklung freie) Software bezeichnete, ist Oracle JRockit Missionskontrolle Seine Management Console hat die Fähigkeit , einfache Profilanrufe durchzuführen von einigen Methoden (plus es gibt mehr Profilierungsoptionen und definitiv schneller als TPTP).

Wie bei der Messsystemzeit vor / nach Methodenaufrufen: Grundsätzlich funktioniert es, hat aber einige kleinere "Fehler" (z. B. Hintergrundanwendungen können das Ergebnis "verändern").

Ich persönlich würde zuerst mit VisualVM oder JRockit Mission Control gehen.

    
Csaba_H 02.09.2009 09:01
quelle
1

Das Problem mit "profiler 101" ist, dass es viele Ideen enthält, deren Rechtfertigung eher eine Frage der Popularität als des gesunden Denkens ist.

Die größte Idee ist, dass Performance-Probleme am besten durch Messung der Performance gefunden werden können.

Das ist Top-Down-Denken, und es ist wie der Versuch, in der Regierung Verschwendung zu finden, indem man sich das Budget jeder Abteilung ansieht. Eine Alternative ist ein Bottom-up-Ansatz, z. B. die Auswahl mehrerer zufälliger Einheiten von Geld oder Zeit und (am wichtigsten) die Bestimmung, warum jeder ausgegeben wird.

Wenn es Abfall gibt, wird es schnell gefunden. Der Grund ist einfach, wenn ein Prozent (etwa 40%) verschwendet wird, dann zeigt dieser Prozentsatz der Proben (im Durchschnitt) genau, wie es verschwendet wird.

Dies ist die Sprache- agnostische Methode, die ich benutze.

HINZUGEFÜGT: Sie denken vielleicht, dass ein großer Teil wie 40% unrealistisch ist, weil Sie sich das nicht vorstellen können, aber es ist durchaus möglich .

    
Mike Dunlavey 02.09.2009 17:17
quelle

Tags und Links