Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring boot netty web应用程序中的吞吐量_Java_Spring_Netty_Throughput_High Load - Fatal编程技术网

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

Java spring boot netty web应用程序中的吞吐量,java,spring,netty,throughput,high-load,Java,Spring,Netty,Throughput,High Load,我想提高web服务器的吞吐量。 但是,当我用高负载(jmeter)测试它时,我不明白到底发生了什么 我在一台拥有8核cpu的计算机上运行spring bootwebflux应用程序(spring boot 2.0.2,netty) 我用以下代码创建了一个简单的控制器: @GetMapping("/test-delay") public Mono<String> testGetWithDelay() throws InterruptedException { Thread.sl

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

我在一台拥有
8核
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());
}
@GetMapping(“/test delay”)
公共Mono testGetWithDelay()抛出InterruptedException{
睡眠(3000);
返回Mono.just(“当前时间:+LocalDateTime.now());
}
“Thread.sleep(3000)”
-它是对同步作品的模仿。 然后我用100个线程运行jmeter测试。我看到的吞吐量只有
2.5条消息/秒
。我想应该是每3秒100条左右(大约30条)

因此,我有两个问题:

  • 为什么吞吐量这么低
  • 我该怎么办

  • 谢谢

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

    因此,您需要做的是移动
    线程。sleep(3000)
    block来分离
    线程池/执行器(这样工作线程就不会被阻塞)或
    线程。sleep(3000)
    代码应该在某种非阻塞API中执行(例如在webflux中,您可以使用
    Mono.fromCallable


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

    为什么要被阻塞?您在非阻塞服务中有一个阻塞操作,接下来您最多可以处理8个并发任务(实际上这取决于您的CPU体系结构),如果所有任务都在等待,那么在一段时间内不会发生任何事情。通常,当使用反应式方法时,您不会获得更好的性能,但会获得更好的资源利用率,这意味着您可以使用更少的资源来执行阻塞操作。谢谢,@M.Deinum,请给我一个建议,在我的情况下,如何提高吞吐量?mono.delayElement
    是否也能达到同样的效果?非常感谢大家!我希望,我明白了主要的意思。我会尝试使用它