簡體   English   中英

Spring Boot Netty Web應用程序的吞吐量

[英]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條消息/秒)

所以,我有兩個問題:

  1. 為什么吞吐量這么低
  2. 我該如何管理

謝謝

您的結果是正確的。 您獲得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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM