2017-05-03 7 views
1

Ich möchte Leistungstests mit Jmh schreiben, um einige Teile des Codes meiner Anwendung zu messen. Ich habe gelesen jmh samples auf, wie man Tests schreibt und sah einige Gespräche auf youtube über jmh und Leistungsprüfungen.Wie wählt man jmh Konfigurationsparameter

Was ich nicht verstehe ist, wie man korrekte Werte für @Warmup, @Measurement und @Fork Werte wählt. In den meisten Beispielen ist es 1 Fork, 10 Iterationen mit 1 Sekunde Dauer.

Ich verstehe, dass es keine Silberkugel für die Konfiguration gibt, aber was sollte mein Denkprozess sein, wenn ich die Werte wähle, die ich setzen sollte?

Antwort

1

Ich weiß nicht, ob jemand Parameter empfehlen könnte, die tatsächlich so nah sind, wie Sie vielleicht brauchen - wahrscheinlich nicht einmal die Jungs, die das Werkzeug geschrieben haben. Dies ist sehr spezifisch für den Anwendungsfall, den Sie testen, das Betriebssystem, die JVM, etc.

Ich persönlich mache es ein paar Mal mit verschiedenen Parametern und erfassen Sie das Ergebnis jedes Mal, so dass ich es analysieren konnte. Sie haben einige Fehler +/- (für die durchschnittliche Zeit mindestens) Feld, das ist meine erste Angabe. Wenn es zu groß ist (und das würdest du bestimmen), erhöhe ich normalerweise die Werte @Warmup und @Measurement; das ist keine goldene Regel, aber das ist was ich tue. Hier ist ein Beispiel verwende ich:

@BenchmarkMode(Mode.AverageTime) 
@OutputTimeUnit(TimeUnit.NANOSECONDS) 
@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) 
@Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) 
@State(Scope.Thread) 

Ich könnte erhöhen die iterations und time nach und nach, um zu sehen, ob ich nahezu konstante Ergebnisse mit früheren Läufen erhalten.

Normalerweise lasse ich alle Benchmarks unter dem gleichen Aufwärmprogramm laufen, so dass die Ergebnisse nicht davon beeinflusst werden.

Die Sache, die Sie hier bekommen, ist, dass Sie gute oder schlechte Ergebnisse bekommen, oder langsam und schnell - aber das ist nur die Ausgabe, nicht der Grund. Versteht den Grund und jmh unter perfasm oder xperfasm und viele andere Profiler läuft, ist eine ganz andere Küche, weg von meiner Liga ...