ASP.NET性能調整之解決Server Too Busy錯誤

來源:http://www.cnblogs.com/bccu/archive/2008/12/10/1351775.html
    最近公司的一個ASP.NET站點頻繁出現Server Too Busy錯誤,具體表現爲頁面響應慢、經常出現Server Too Busy異常;但實際上服務器的資源消耗卻很低,CPU使用只有10%左右,非常奇怪。

    該站點運行環境爲Windows 2000,IIS5.0.NET Framework 1.1,站點壓力約爲每秒10個連接,峯值時約爲30。

    從網上查找相關資料後,從表現出的情況來看(響應慢,拋出Server Too Busy異常),初步判斷爲同時連接過多引起的線程阻塞引起。修改web.config中的httpRuntime配置節中的appRequestQueueLimit參數後,Server Too Busy 的錯誤得到解決。此參數默認從machine.config中繼承,默認值爲100,改爲1000後Server Too Busy的錯誤不再出現。

    雖然服務器忙的錯誤解決了,但是站點響應還是很慢,有時候要等上5—10秒才能打開頁面。分析原因應該是同時請求過多,而IIS工作線程不足的原因引起,修改machine.config中processModel配置節maxWorkerThreads參數爲200後站點響應速度慢的問題得到解決。此參數默認值爲20,可根據服務器硬件配置於壓力大小適當調整。

     分析原因,是因爲站點程序中使用了HttpWebRequest請求外部服務器的頁面,而這個操作是相當耗時的(外部服務器響應慢是主要原因)。當訪問者的請求到達ASP.NET工作進程後,ASP.NET首先會檢查是否有空餘的工作線程(WorkerThread),如果有的話,就交給一個空閒的工作線程去處理,如果沒有空閒的工作線程,那麼這個請求就會被放到請求隊列(RequestQueue)中,這個時候的表現就是響應很慢。當訪問量過大導致請求隊列也滿了的時候,ASP.NET就會拋出Server Too Busy異常了。在.NET 1.1中,默認的工作線程和請求隊列分別爲20和100,當運行的代碼比較費時而訪問量又較大的時候,這兩個默認值顯然就太小了。(現在的服務器硬件便宜了,一般PC服務器的吞吐量都應該遠超過這個數)。這兩個值可以根據服務器壓力大小來進行合理配置。以調整站點吞吐量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章