![](/img/trans.png)
[英]Using Tomcat HTTP and Netty UDP in same Spring Boot Application
[英]Throughput in spring boot netty web application
我想提高Web服务器的吞吐量。 但是我不了解在高负载(jmeter)下测试时到底发生了什么。
我在具有8 core
cpu的计算机上运行spring boot webflux
应用程序( spring boot 2.0.2, netty
)。
我使用以下代码创建了一个简单的控制器:
@GetMapping("/test-delay")
public Mono<String> testGetWithDelay() throws InterruptedException {
Thread.sleep(3000);
return Mono.just("current time:" + LocalDateTime.now());
}
"Thread.sleep(3000)"
-它是对同步作品的模仿。 然后我用100个线程运行jmeter tests
。 而且我发现吞吐量仅为2.5 message/sec
。 我认为应该是messages/3 sec
100条messages/3 sec
(大约30条消息/秒)
所以,我有两个问题:
谢谢
您的结果是正确的。 您获得2.5条消息/秒,延迟3秒(在每个线程中),这使我们获得2.5 * 3 = 7.5 = 8
内核。 默认情况下,Webflux使用availableProcessors()
作为处理网络/工作IO的默认线程数。
因此,您需要做的是要么增加处理线程的数量,要么将Thread.sleep(3000)
块移至单独的ThreadPool/Executor
(这样就不会阻塞工作线程),或者您的Thread.sleep(3000)
代码应在某些情况下执行一种非阻塞API(例如,在webflux中,您可以使用Mono.fromCallable
)。
我建议您采用第二种/第三种方法,因为非阻塞API绝不应该被阻塞。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.