Asp.net core kestrel 伺服器效能分析
因近來發現neocli 使用asp.net core kestrel 伺服器提供rpc呼叫,效能比較低。
和以前做過測試差異比較大,故而再次測試。考慮到micheal提供的因素主要是http相應時間,故針對http響應時間增加兩個測試
先放程式碼,測試程式在
https://github.com/lightszero/lightchain
測試說明
測試方案1
http請求直接返回
測試方案2
延遲1秒返回,但是用Task.Delay,讓Task模型不會堵塞
測試方案3
延遲1秒返回,當前執行緒直接堵塞死
測試結果
結果分析
測試均針對127.0.0.1進行,採用100個httpclient物件,從100個佇列 分別請求測試123
得到的結論是
測試1 tps在 1000 到800浮動
測試2 tps 在 80 到100 浮動
測試3 tps 在 15 到 30 浮動
另外調整服務端ThreadPool.SetMaxThread 對測試結果乾擾很小,忽略不計
分析此結論認為,kestrel 的處理能力對響應時間長的請求比較敏感。實際用於處理請求的執行緒估計是30左右,沒有調整方法。
建議的處理方法
所有的RPC均受此影響,http響應時間越慢,整體處理能力就越差。
無論是sendraw,invokescript。
NEOCLI的rpc效能要提升,都需要比較大的改造
之後將嘗試使用websocket 之類的長連線方案提升通訊效能