Spring boot web测试代码
@RequestMapping("/")
public String index() {
int num = 1;
for (int i = 1; i <= 10; i++) {
num *= i;
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "Hello Spring Boot 2.0!"+num;
}
Spring boot webflux测试代码
@GetMapping("/hello")
public Mono<String> hello() {
int num = 1;
for (int i = 1; i <= 10; i++) {
num *= i;
}
return Mono.just("Welcome to reactive world ~"+num).delayElement(Duration.ofSeconds(2));
}
都是延时2s返回结果,Spring boot web是在Tomcat中运行,Spring boot webflux在netty中运行
测试环境为Windows 7 i7 16G
结果
使用JMeter做压力测试
web:
webFLux:
根据测试结果可以看出:webFlux的响应时间与吞吐量完全是完胜web,足可见webFlux的并发性能确实很厉害
问题
但webFlux也是有弊端的,有时候5000的并发量情况下,webFlux会出现失败的情况
我猜测这应该是与框架的背压机制有关,请求数量超出其自身的缓冲,而抛弃了部分的请求,具体原因不是很清楚,
如果哪位大牛知道具体原因欢迎评论区讨论
JMeter结果数据说明:
Sample:本次测试场景共运行多少线程;
Average:平均响应时间;
Min:响应最小时间;
Max:响应最大时间;
Error:出错率;
Throughput - 吞吐量以“requests/second、requests /minute、 requests /hour”来衡量。 时间单位已经被选取为second