IIS與ASP.NET中的隊列


一、IIS:應用程序池隊列(Application pool queue,位於HTTP.SYS)

應用程序池隊列

這是請求到達IIS后遇到的第一個隊列,http.sys收到請求后會將請求放入對應的應用程序池隊列,這樣可以減少上下文的切換。需要注意的是應用程序池隊列雖然是給w3wp進程用的,但它存在於http.sys的內存區(http.sys是一個運行於kernel-mode的設備驅動程序)。如果把http.sys比作一塊網卡,那應用程序池隊列相當於網卡的緩沖區。

1)設置方法:在IIS應用程池設置中設置Queue Length的值(缺省值是1000)。

應用程序池隊列長度

2)監測方法:Windows性能監視器中監測Http Service Request Queues\ArriveRate。

3)出隊方法:工作者進程(w3wp,user-mode)通過完成端口(completion port)從應用程序池隊列中取出請求進行處理(user-mode與kernel-mode之間的通信),需要注意的是這里進行了IO操作。

二、ASP.NET:CLR線程池隊列(CLR threadpool queue)

w3wp從應用程序池隊列中取出請求后,接下來就是從CLR線程池中撈出一個CLR線程處理請求,如果池中空無一線,就會將請求放在CLR線程池隊列中。

1)設置方法:在machine.config中設置processModel/requestQueueLimit(默認是1000),或者Aspnet.config中設置applicationPool。

<processModel enable="true"  requestQueueLimit="2000" >

2)監測方法:Windows性能監視器中監測ASP.NET v4.0.30319\Requests Queued。 

【參考資料】

Understanding IIS 7.0 Architecture : IIS 7.0 Core Components

Everything you ever wanted to know about ASP.NET request queueing


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM