ASP.NET xử lý các yêu cầu bằng cách sử dụng các luồng từ nhóm chuỗi .NET. Hồ bơi thread duy trì một nhóm các chủ đề đã phát sinh chi phí khởi tạo luồng. Do đó, các chủ đề này dễ sử dụng lại. Hồ bơi thread .NET cũng tự điều chỉnh. Nó giám sát CPU và sử dụng tài nguyên khác, và nó thêm chủ đề mới hoặc cắt kích thước hồ bơi thread khi cần thiết. Nói chung, bạn nên tránh tạo các chuỗi thủ công để thực hiện công việc. Thay vào đó, hãy sử dụng các chủ đề từ nhóm luồng. Đồng thời, điều quan trọng là đảm bảo rằng ứng dụng của bạn không thực hiện các hoạt động chặn có thời gian dài có thể nhanh chóng dẫn đến sự đói khát của nhóm luồng và các yêu cầu HTTP bị từ chối.
I/O đĩa, cuộc gọi dịch vụ web, đều bị chặn. Có tối ưu hóa tốt nhất bằng cách sử dụng các cuộc gọi không đồng bộ. Khi bạn thực hiện cuộc gọi async, asp.net giải phóng luồng của bạn và yêu cầu sẽ được gán cho một chuỗi khác khi hàm gọi lại được gọi.
Để cấu hình số lượng bài bạn có thể đặt:
<system.web>
<applicationPool maxConcurrentRequestsPerCPU="50" maxConcurrentThreadsPerCPU="0" requestQueueLimit="5000"/>
</system.web>
Tham khảo: ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0
Đây là những thiết lập đó Microsoft best practices recommend:
- Set maxconnection đến 12 * # CPU. Cài đặt này kiểm soát số lượng kết nối HTTP gửi đi tối đa mà bạn có thể bắt đầu từ ứng dụng khách. Trong trường hợp này, ASP.NET là máy khách. Đặt kết nối tối đa thành 12 * # CPU.
- Đặt maxIoThread thành 100. Cài đặt này kiểm soát số lượng chủ đề I/O tối đa trong nhóm chủ đề .NET. Số này được tự động nhân với số lượng CPU có sẵn. Đặt maxloThreads thành 100.
- Đặt maxWorkerThreads thành 100. Cài đặt này kiểm soát số lượng chuỗi công việc tối đa trong nhóm chủ đề. Số này sau đó sẽ tự động nhân với số lượng CPU có sẵn. Đặt maxWorkerThreads thành 100.
- Đặt minFreeThreads thành 88 * # trong số CPU. Cài đặt này được sử dụng bởi quy trình công nhân để xếp hàng tất cả các yêu cầu đến nếu số lượng các chuỗi có sẵn trong nhóm chủ đề giảm xuống dưới giá trị cho cài đặt này. Cài đặt này giới hạn hiệu quả số lượng yêu cầu có thể chạy đồng thời với maxWorkerThreads - minFreeThreads. Đặt minFreeThreads thành 88 * # của CPU. Điều này giới hạn số lượng yêu cầu đồng thời đến 12 (giả sử maxWorkerThreads là 100).
- Đặt minLocalRequestFreeThreads thành 76 * # trong số CPU. Thiết lập này được sử dụng bởi quy trình công nhân để xếp hàng các yêu cầu từ localhost (trong đó ứng dụng Web gửi các yêu cầu đến một dịch vụ Web cục bộ) nếu số lượng các luồng có sẵn trong nhóm luồng nằm dưới số này. Cài đặt này tương tự như minFreeThread nhưng nó chỉ áp dụng cho các yêu cầu lưu trữ cục bộ từ máy tính cục bộ. Đặt minLocalRequestFreeThreads thành 76 * # của CPU.
Lưu ý: Các đề xuất được cung cấp trong phần này không phải là quy tắc. Họ là một điểm khởi đầu.
Bạn sẽ phải đánh giá ứng dụng của mình để tìm ứng dụng nào hoạt động tốt nhất cho ứng dụng của bạn.
Hãy quan tâm đến giá trị cài đặt từ các phương pháp hay nhất của Microsoft, bài viết này được viết vào năm 2004 (!). Tuy nhiên, câu trả lời hay! –
Tinh chỉnh các số trên thực sự hoạt động – jbro91837