gpt4 book ai didi

java - spring boot netty web 应用程序中的吞吐量

转载 作者:行者123 更新时间:2023-11-29 04:19:10 24 4
gpt4 key购买 nike

我想提高我的网络服务器的吞吐量。但是我不明白当我用高负载(jmeter)测试它时到底发生了什么。

我在具有 8 核 cpu 的计算机上运行 spring boot webflux 应用程序(spring boot 2.0.2, netty)。
我用这段代码创建了一个简单的 Controller :

@GetMapping("/test-delay")
public Mono<String> testGetWithDelay() throws InterruptedException {
Thread.sleep(3000);
return Mono.just("current time:" + LocalDateTime.now());
}

"Thread.sleep(3000)" - 它是对同步作品的模仿。然后我用 100 个线程运行 jmeter 测试。我看到吞吐量仅为 2.5 条消息/秒。我认为应该是大约 100 messages/3 sec(大约 30 条消息/秒)

所以,我有两个问题:

  1. 为什么吞吐量这么低
  2. 我该如何管理它

谢谢

最佳答案

您的结果是正确的。你得到 2.5 条消息/秒,延迟 3 秒(在每个线程中),这给了我们 2.5 * 3 = 7.5 = 8 核心。 Webflux 默认使用 availableProcessors() 作为处理网络/工作 IO 的默认线程数。

所以你需要做的是 increase the number of processing threads或将 Thread.sleep(3000) block 移动到单独的 ThreadPool/Executor (因此工作线程不会被阻塞)或您的 Thread.sleep(3000) 代码应该在某种非阻塞 API 中执行(例如在 webflux 中你可以使用 Mono.fromCallable)。

我建议您使用第二种/第三种方法,因为不应该阻塞非阻塞 API。

关于java - spring boot netty web 应用程序中的吞吐量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50362871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com