[英]WebFlux WebClient performance doesn't touch maximum of CPU
我正在編寫一個網絡密集型 WebFlux 應用程序。 當收到請求時,應用程序向另一個外部服務器請求和接收一些東西,然后回復原始請求者。 我說的是 WebFlux 應用程序,我在調用外部服務器時使用 WebClient。
應用程序的性能不是那么令人滿意。 我認為它應該觸及最大 CPU 資源,最大 CPU 時的最大 TPS。 但它顯示出低 tps,cpu 僅為 30 或 40%。 為什么它不再使用 CPU 來獲得更多 TPS,即使它有更多空間來執行更多請求。
我將它與沒有外部調用(WebClient)的任務進行了比較,它在最大 CPU 資源使用率下顯示了完整的 TPS。
====
示例代碼: https : //github.com/mouse500/perfwebf
用於 WebClient 性能的 perfwebf 示例項目
/workloadwexcall : 使用外部調用的工作負載
/workloadwoexcall : 僅使用 CPU 作業的工作負載(但延遲 1 毫秒)
外部調用是通過簡單的節點服務器在 prj 內部實現的,包括所有內容。
您可以構建 Dockerfile 並使用 docker 運行
並准備jmeter什么的,
test1:使用超過 200 個線程調用 /workloadwexcall api => 在 perfwebf 服務器上顯示 30~40% 的 CPU 水平
test2:使用超過 200 個線程調用 /workloadwoexcall api => 在帶有 m 的 perfwebf 服務器上顯示幾乎 100% 的 CPU 水平
======
觀察至今,
我在 AWS EC2(8 核,16 G Mem)上進行了測試,
我認為外部服務器足夠簡單和強大,可以做出反應
測試 1 時,
服務器的大量線程等待
{
"threadName": "reactor-http-epoll-3",
"threadId": 20,
"blockedTime": -1,
"blockedCount": 8,
"waitedTime": -1,
"waitedCount": 0,
"lockName": null,
"lockOwnerId": -1,
"lockOwnerName": null,
"inNative": true,
"suspended": false,
"threadState": "RUNNABLE",
"stackTrace": [
{
"methodName": "epollWait",
"fileName": "Native.java",
"lineNumber": -2,
"className": "io.netty.channel.epoll.Native",
"nativeMethod": true
},
{
"methodName": "epollWait",
"fileName": "Native.java",
"lineNumber": 148,
"className": "io.netty.channel.epoll.Native",
"nativeMethod": false
},
{
"methodName": "epollWait",
"fileName": "Native.java",
"lineNumber": 141,
"className": "io.netty.channel.epoll.Native",
"nativeMethod": false
},
{
"methodName": "epollWaitNoTimerChange",
"fileName": "EpollEventLoop.java",
"lineNumber": 290,
"className": "io.netty.channel.epoll.EpollEventLoop",
"nativeMethod": false
},
{
"methodName": "run",
"fileName": "EpollEventLoop.java",
"lineNumber": 347,
"className": "io.netty.channel.epoll.EpollEventLoop",
"nativeMethod": false
},
{
======
我不知道,
netty epoll 不滿足困難的情況?
docker net 機制不符合? (我也在沒有 docker 的情況下進行了測試,結果相同)
Linux內核不滿足硬情況?
AWS EC2 網絡帶寬性能低?
問題是,為什么它不再使用 CPU 來獲得更多的 TPS,即使它有更多的空間來執行更多的請求。
希望為此找到一些解決方案......
Nitesh 很好地說明了情況。
現在我將后端服務器從簡單的 Node 應用程序更改為簡單的 WebFlux 應用程序。 Noode 的單核是瓶頸,當我將后端服務器更改為 WebFlux 應用程序時,它顯示了最大 tps,
現在我認為這個示例項目沒有什么奇怪的地方。
感謝你所做的一切。
-- 順便說一句,現在我需要回到我公司項目的原始問題。 ,它的低性能。 現在它調整了 WebClient 不是問題。
感謝你所做的一切
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.