文章出處

一、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


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()