前言
最近這幾週的工作內容就是不斷對 WebAPI 進行壓力測試。與過去最大不同的是,這次有強大硬體設備讓我做更嚴格測試案例。這篇文章簡單紀錄整個測試過程,但並非所有調整都有顯著效能提升,這裡僅作為個人筆記與提供有興趣的人參考。測試與紀錄
1. Queue Length
IIS 會限制 application pool requests 最大值,若超過這個數值,使用者會收到 503 - Service Unavailable 錯誤訊息,Queue length 預設值為1000。官方建議值應為使用者 x 1.5 ,若使用者為2000人,Queue length 應為 3000。設定位置在 IIS 內 Application pools > Advanced Settings... > Queue length
Quque Length |
2. 登錄檔 (regedit)
修改Windows Service 登錄檔,將連接埠使用數量提高,降低連線等待時間,藉此讓連線效率提升,讓伺服器能承受更大的壓力。路徑為:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters
所需要增加的參數為
MaxUserPort : 對外連線使用的連接埠數量,我們設定 65000若開啟沒有這兩個檔案,可以自行手動新增 (類型:DWORD Value)
TcpTimedWaitDelay : TIME_WAIT 時間,我們設定 30
Step 1. 右鍵 > New > DWORD Value
Right clck > New > DWORD Value |
Step 2. TcpTimedWaitDelay 設定 Value 為 30,注意右邊要選擇 Decimal (10進位)
Set TcpTimedWaitDelay to 30 |
Step 3. MaxUserPorts 設定為 65000,注意右邊要選擇 Decimal (10進位)
Set MaxUserProts to 65000 |
Step 4. 重開機 (restart your windows server)
註:在自己的測試案例中,雖然 port數設定為65000,但壓力測試過程中,伺服器連線數量最大約到3000左右。
3. 移除不需要的 module
因為本身測試環境為WebAPI,可將許多IIS預設載入的模組進行移除。我們能在各別站台的Web.Config 檔案進行設定。在移除過程中請參考自己的網站/服務是否需要這些模組。Step 1. 開啟 IIS -> 選擇站台 -> 選擇模組
找到模組 |
Step 2. 我們可以移除模組類型為 managed 的模組
我們預計測試移除的模組 |
Step 3. 我們對該模組點選右鍵,選擇移除
移除模組 |
Step 4.在web.config 上可以看見移除模組 (從web.config編輯也有相同效果)
移除後的web.config |
4. Disable SessionState
Step 1. 在 IIS 站台,選擇 Sesseion Statesite > Session State |
Step 2. 選擇未啟用 > 套用
Not enabled then apply |
註:在自己的測試案例中,效果並不顯著。
5. HTTP Compression
Step 1. 點選站台 > 壓縮 (Compress)
選擇壓縮 |
Step 2. 勾選啟用動態內容壓縮 (Check Enable dynamic content compression)
勾選動態內容壓縮 |
註1:在自己的測試案例中,原先已經開啟,效果不詳。
註2:壓縮不一定增加效能,可能增加CPU使用而導致sever整體效能低落。
註3:在自己的受測案例中,WebAPI回傳資料不大,效果似乎不大。
6. Disable debug mode
Step 1. 在 web.config 內 system.web 內設定,如下
Step 2. 儲存後將會自動啟動應用程式
註:在自己的測試案例中,原先已經開啟,效果不詳。
7. Max worker processor (工作處理序數上限)
Step 1. 選擇應用程式集區 > 選擇應用程式 > 進階設定Step 2. 將 Maximum worker processes 調整成 2,點選OK。
update Maximum worker processes |
註:在自己的測試案例中,效果不佳。
註:若你有使用session,可能會造成影響。
相關系列文章:JMeter 系列文章
參考資料
1. https://technet.microsoft.com/en-us/library/cc753681(v=ws.10).aspx2. Avoiding TCP/IP Port Exhaustion
3. 在 Windows 上遇到非常多 TIME_WAIT 連線時應如何處理 - The Will Will Web
4. Modifying the IIS Queue Length
5. Improving ASP.NET Performance Part 11: Session State Management
6. ASP.NET Performance Overview
7. Built-in GZip/Deflate Compression on IIS 7.x
1 留言
老師您好,想請教一下,快速失敗保護一般是建議開啟嗎?
回覆刪除預設5分鐘內5次錯誤就關閉應用程式,這樣是不是關閉反而是比較好的設定呢?