Tối ưu hóa cấu hình Application Pool trên IIS cho hiệu năng cao và tải nặng

Cấu hình cơ bản để tăng cường hiệu suất Application Pool

Để thực hiện các thay đổi, truy cập vào trình quản lý IIS Manager, chọn mục Application Pools, sau đó nhấn chuột phải vào ứng dụng tương ứng và chọn Advanced Settings...

1. Thiết lập chung (General)

  • Queue Length: Giá trị mặc định thường là 1000. Để xử lý lưu lượng truy cập lớn, hãy nâng con số này lên tối đa 65535.
  • Enable 32-Bit Applications: Chuyển sang True nếu ứng dụng của bạn sử dụng các thành phần (COM, DLL) hoặc thư viện PHP phiên bản 32-bit để tránh lỗi tương thích.
  • Managed Pipeline Mode: Ưu tiên sử dụng Integrated để đạt hiệu suất tốt nhất với ASP.NET hiện đại.

2. Thiết lập nâng cao và chống treo (Recycling & Process Model)

  • Idle Time-out (minutes): Mặc định là 20. Đối với các ứng dụng quan trọng, hãy tăng giá trị này hoặc đặt về 0 để ngăn ứng dụng tự giải phóng bộ nhớ khi không có yêu cầu, giúp tránh độ trễ cho lần truy cập đầu tiên.
  • Rapid Fail Protection: Mục Enabled nên chuyển sang False để tránh việc IIS tự động tắt Application Pool khi có một vài lỗi phát sinh liên tục.
  • Disable Overlapping Recycle: Đặt thành True để giải quyết tình trạng "treo" Application Pool khi hệ thống thực hiện thu hồi bộ nhớ (recycling) trong lúc đang xử lý tải.

Mở rộng khả năng xử lý đồng thời lên 100.000 kết nối

Khi gặp lỗi HTTP Error 503.2 - Service Unavailable, nguyên nhân thường do giới hạn appConcurrentRequestLimit (mặc định khoảng 5000) bị vượt quá. Để hỗ trợ quy mô 100.000 kết nối đồng thời, cần can thiệp sâu vào hệ thống theo các bước sau:

1. Cấu hình giới hạn yêu cầu đồng thời (serverRuntime)

Sử dụng công cụ dòng lệnh appcmd.exe để ghi đè giới hạn mặc định của IIS:

%systemroot%\system32\inetsrv\appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000

Sau khi chạy, bạn có thể kiểm tra thay đổi trong file cấu hình applicationHost.config tại thuộc tính <serverRuntime appConcurrentRequestLimit="100000" />.

2. Điều chỉnh giới hạn hàng đợi trong machine.config

Bạn cần chỉnh sửa file cấu hình của .NET Framework tùy theo phiên bản đang sử dụng (ví dụ v4.0.30319):

  1. Mở file: %systemroot%\Microsoft.Net\Framework64\v4.0.30319\CONFIG\machine.config
  2. Tìm thẻ <processModel> và thay đổi thuộc tính như sau:
<configuration>
    <system.web>
        <processModel enable="true" requestQueueLimit="100000" />
    </system.web>
</configuration>

3. Tối ưu hóa số lượng kết nối TCP/IP qua Registry

Để hệ điều hành Windows Server cho phép số lượng kết nối mạng lớn, hãy chạy lệnh sau với quyền Administrator:

reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameters /v MaxConnections /t REG_DWORD /d 100000

Tinh chỉnh chuyên sâu cho hệ thống Web tải cực cao

Giới hạn kích thước gói tin và Header

Nếu gặp lỗi "Request Too Long", hãy tăng giới hạn bộ đệm của http.sys thông qua Registry:

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxFieldLength /t REG_DWORD /d 32768
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxRequestBytes /t REG_DWORD /d 32768

Cấu hình Worker Threads trong machine.config

Tăng cường số lượng luồng xử lý để tối ưu hóa CPU đa nhân:

<processModel enable="true" 
    maxWorkerThreads="100" 
    maxIoThreads="100" 
    minWorkerThreads="50" 
    minIoThreads="50" />

Quản lý bộ nhớ đệm (Cache-Control)

Thêm cấu hình vào web.config để tận dụng bộ nhớ đệm trình duyệt, giảm tải cho server:

<configuration>
    <system.webServer>
        <staticContent>
            <clientCache cacheControlCustom="public" />
        </staticContent>
    </system.webServer>
</configuration>

Sau khi hoàn tất tất cả các thay đổi trên, hãy thực hiện khởi động lại dịch vụ HTTP và IIS để áp dụng cấu hình mới:

net stop http & net start http & iisreset

Thẻ: IIS Application Pool Web Server Performance tuning .NET Framework

Đăng vào ngày 28 tháng 10 lúc 17:46