У меня есть приложение , которое я хочу сравнить с помощью JMH
. Любая ссылка для этой интеграции будет полезна.Бенчмаркинг с пружинным ботинком с JMH
ответ
Решение было довольно легким, чем я думал. Важная часть состоит в том, чтобы запустить приложение Spring-Boot, когда эталонный процесс инициализируется. Определите переменную уровня класса для контекста конфигурации и дайте ссылку на нее во время настройки эталона. Вызовите метод bean внутри теста.
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();
}
}
}
Я бы не стал полагаться на число, которое вы выбрали из этого теста. Вероятно, вы полагаетесь на конфигурацию службы и любой механизм прокси. Кроме того, большая часть времени будет потрачена на печать результата. Скорее, вы должны вернуть значение сервиса из метода и позволить JMH обрабатывать escape. Это не то, как вы должны использовать JMH. –
Оператор System.out.println удаляется, чтобы получить правильный тест для метода li(). –
Фантастический, спасибо за пример. –
- 1. Интегрируйте redis с пружинным ботинком
- 2. Использование Hbase с пружинным ботинком
- 3. Проект с несколькими модулями с пружинным ботинком
- 4. Использование Maven с пружинным ботинком - parentID
- 5. первое приложение с пружинным ботинком не работает
- 6. Устранение неполадок тимелеафа с пружинным ботинком
- 7. Возможно ли иметь микросервисы с пружинным ботинком
- 8. Как использовать угловой2 с пружинным ботинком
- 9. Разверните банку с пружинным ботинком на AWS
- 10. Использование пружины с пружинным ботинком и maven
- 11. Как сделать службу REST с пружинным ботинком с безопасностью?
- 12. Микро-бенчмаркинг цикла с различными значениями в JMH
- 13. Невозможно запустить сгенерированную банку из майки с пружинным ботинком
- 14. Интеграция весеннего облачного Sleuth с пружинным ботинком amqp
- 15. Отправить запрос с угловым 2 и пружинным ботинком
- 16. Почему я получаю 404 для отдыха с пружинным ботинком
- 17. Как использовать hawt.io с пружинным ботинком и встроенным Jetty
- 18. CORS с пружинным ботинком и angularjs не работает
- 19. Безопасный REST Api с пружинным ботинком и JWT
- 20. Бесконечная петля с пружинным ботинком в отношениях один-много
- 21. не удается найти html-страницы с пружинным ботинком
- 22. развертывание войны с пружинным ботинком в Tomcat не работает
- 23. Cloudera impala с пружинным каркасом?
- 24. JMH Бенчмаркинг - Сжатый способ сравнения выполнения альтернативных реализаций
- 25. Предельная глубина в данных весны jpa с конфигурацией yaml с зимним спящим и пружинным ботинком
- 26. Смартфон с пружинным ботинком с OAuth 2 и JWT для обеспечения безопасности
- 27. Бенчмаркинг Couchbase с 'YCSB'
- 28. Бенчмаркинг чистой функции С ++
- 29. CharacterEncodingFilter не установлен с пружинным ботинком 1.2.0 и spring-boot-legacy
- 30. Понимание асимметрии в jmh
IMHO 'jmh' не подходит для бенчмаркинга, но только для определенных методов. –
Мне удалось сделать bechmarking для весеннего приложения MVC. Они должны быть способ сделать это для приложений Spring-загрузки –