簡體   English   中英

IIS:無法獲得高吞吐量

[英]IIS: Unable to get high throughput

我有一個IIS應用程序; 在應用程序的負載測試期間,我們發現吞吐量非常低。 在嘗試解決此問題時,我們進行了測試-加載測試頁面,該頁面返回約1000字節的靜態數據,並且控制器處於休眠狀態。 我們發現,如果睡眠持續時間大約為1秒,則IIS無法在1秒內處理超過10 rps的負載請求。

現在,我了解了並發請求以及.Net 4.5之后的版本,默認值為5000。因此,如果IIS處理5000個並發請求,為什么它不能以10 rps的速度處理請求,而每個請求卻要花1秒鍾? 數學不累加。

請注意,返回了靜態數據,數據量很小,並且所有功能都在進行睡眠。 因此,沒有任何機器參數(如CPU,磁盤,網絡等)超過限制。 服務器幾乎不閃爍。

這是整個控制器代碼

public ActionResult Contact()
{
    Thread.Sleep(1000);
    return View();
}

那里的視圖返回一些靜態HTML。 我使用Visual Studio模板創建了Web應用程序; 模板返回靜態HTML。

當我消除睡眠時,那么以高rps運行服務器就沒有問題。 但是隨后請求完成得如此之快,以至於IIS甚至在高rps時都不會遇到任何高並發性。

所有請求都屬於同一個會話嗎? 如果是這樣,則此帖子指示問題的原因。

從本質上講,事實證明ASP.NET會話不是線程安全的,並且您不能有來自同一會話的並行請求。 ASP.NET將簡單地序列化調用並按順序執行。 這將導致您在調用Thread.Sleep()時看到阻塞。

如果請求來自不同的會話,則不應有阻塞。 無論如何,您都可以嘗試關閉會話:

<sessionState mode="Off" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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