Ich habe eine Anwendung, die ich unter Verwendung JMH
Benchmark verwenden möchte. Jede Referenz für diese Integration wird nützlich sein.Benchmarking Spring Boot-Anwendung mit JMH
Antwort
Die Lösung war ziemlich einfach als ich dachte. Der wichtige Teil ist, die Spring-Boot-Anwendung zu starten, wenn der Benchmark initialisiert wird. Definieren Sie eine Klassenvariable für den Konfigurationskontext und geben Sie während der Einrichtung des Benchmarks einen Verweis darauf an. Rufen Sie die Bean-Methode im Benchmark auf.
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Level;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.infra.Blackhole;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import org.springframework.boot.SpringApplication;
import org.springframework.context.ConfigurableApplicationContext;
@BenchmarkMode(Mode.Throughput) @OutputTimeUnit(TimeUnit.MINUTES)
@State(Scope.Thread)
public class ProcessFeedBenchMark {
public static void main(String args[]) throws Exception {
URLClassLoader classLoader = (URLClassLoader) ProcessFeedBenchMark.class.getClassLoader();
StringBuilder classpath = new StringBuilder();
for(URL url : classLoader.getURLs())
classpath.append(url.getPath()).append(File.pathSeparator);
classpath.append("/D:/work/zymespace/benchmark/src/main/resources/").append(File.pathSeparator);
System.out.print(classpath.toString());
System.setProperty("java.class.path", classpath.toString());
Options opt = new OptionsBuilder()
.include(ProcessFeedBenchMark.class.getName() + ".*")
.timeUnit(TimeUnit.MILLISECONDS)
.threads(1)
.shouldFailOnError(true)
.shouldDoGC(true)
.build();
new Runner(opt).run();
}
static ConfigurableApplicationContext context;
private BenchmarkTestService service;
@Setup (Level.Trial)
public synchronized void initialize() {
try {
String args = "";
if(context == null) {
context = SpringApplication.run(BenchmarkSpringBootStater.class, args);
}
service = context.getBean(BenchmarkTestService.class);
System.out.println(service);
} catch(Exception e) {
e.printStackTrace();
}
}
@Benchmark
public void benchmark1 (ProcessFeedBenchMark state, Blackhole bh) {
try {
service.li();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Ich würde nicht auf eine Zahl verlassen, die Sie aus dieser Benchmark bekommen. Sie verlassen sich wahrscheinlich auf die Dienstkonfiguration und jeden Proxy-Mechanismus. Außerdem wird die meiste Zeit für das Drucken des Ergebnisses ausgegeben. Stattdessen sollten Sie den Dienstwert aus der Methode zurückgeben und JMH den Escape-Befehl behandeln lassen. So sollten Sie JMH nicht verwenden. –
Die Anweisung System.out.println wird entfernt, um den richtigen Benchmark für die Methode li() zu erhalten. –
Fantastisch, danke für das Beispiel. –
- 1. Benchmarking von Java HashMap Get (JMH vs Looping)
- 2. Was bedeutet OpenJDK JMH "score error" genau?
- 3. Benchmarking Bildverbesserungsalgorithmus
- 4. Java Benchmarking
- 5. JMH und Multithreading
- 6. Grundverständnis von JMH Benchmark
- 7. JMH Messung Iterationen
- 8. Verständnis JMH Output
- 9. JMH Benchmark erhält NullPointerException mit Autowired Feld im Frühjahr (mit Maven) Projekt
- 10. JMH Add-Speicher mit Optionen Builder
- 11. JMH: Rückgabe der Benchmark-Ergebnisse als JSON-Objekt
- 12. Benchmarking Quantisierung auf Android
- 13. Wie wählt man jmh Konfigurationsparameter
- 14. JMH-Objekte außerhalb eines Methodenbereichs
- 15. Neo4J Performance Benchmarking
- 16. C++ Benchmarking, volatile
- 17. JMH - warum brauche ich Blackhole.consumeCPU()
- 18. XSL: T Benchmarking
- 19. Benchmarking Rails Model Methoden
- 20. Benchmarking Apache Mina Gesamtbandbreite
- 21. Benchmarking schlechte Ergebnisse
- 22. Benchmarking Schienen ActiveRecord Abfragen
- 23. Benchmarking in scala
- 24. wordpress leistung benchmarking
- 25. Benchmarking HTTP-Server, Referenztests
- 26. Benchmarking Nginx gegen Express
- 27. .NET Benchmarking-Frameworks
- 28. Benchmarking von Java-Programmen
- 29. Benchmarking vieler PostgreSQL-Abfragen
- 30. Java Benchmarking-Tool
IMHO 'jmh' ist nicht für Benchmarking-Anwendungen geeignet, sondern nur für bestimmte Methoden. –
Ich habe getan, um für Frühjahr MVC-Anwendung bechmarking.Sie sollte Weg sein, es für Spring-Boot-Anwendungen tun –