2012-12-11 32 views
8

Tôi có một ứng dụng WCF được lưu trữ trong IIS (được viết bằng C#/.Net 4). Theo thời gian, Số lượng xử lý của quy trình tăng theo kiểu thời trang tuyến tính nhiều hơn hoặc ít hơn (tăng lên 30.000 trước khi quá trình tái chế). Theo SysInternals Process Explorer, phần lớn các xử lý mà quy trình có loại Thread. Tuy nhiên, theo Performance Monitor, số lượng các chủ đề vẫn còn nhiều hoặc ít liên tục (khoảng 40)."Rò rỉ" Xử lý chủ đề

Rõ ràng, tôi đang làm điều gì đó sai và đang bị rò rỉ Thread Handles. Tuy nhiên, tôi không rõ chính xác những gì một Thread Handle là trong bối cảnh này. Tôi đã giả định rằng nó là một xử lý cho một sợi, nhưng kể từ khi số lượng các chủ đề còn lại phù hợp, tôi không thấy làm thế nào số lượng xử lý ngày càng tăng. Và, tôi không thể nghĩ ra cách nào để giữ một tay cầm vào một sợi chỉ, trong khi chính sợi chỉ biến mất. Hơn nữa, tôi không rõ ràng tạo chủ đề mới (Tôi đang sử dụng ThreadPool ở những nơi).

Rõ ràng, tôi đang thiếu thứ gì đó. Nhưng cái gì?

+0

Bạn có dịch vụ WCF là SingleInstance, PerCall hoặc Session không? Bạn đang sử dụng một container IoC ở đó? – Jordi

+0

Bạn đang tự quản lý các chủ đề hay bạn đang sử dụng nhóm chủ đề? Loại chủ đề nào sử dụng ứng dụng của bạn (chúng ta đang nói về các luồng mà IIS thực hiện -> bị giới hạn bởi chính IIS, hay các luồng của riêng bạn)? – Rafa

+0

Dịch vụ WCF là một cá thể đơn và đa đồng thời. Không có Container IOC. –

Trả lời

0

According documentation:

Khi một thread mới được tạo ra bởi các CreateThread hoặc CreateRemoteThread chức năng, một tay cầm để các chủ đề được trả về.

Vì vậy, nếu bạn có quá nhiều xử lý, ứng dụng của bạn sẽ tạo Chủ đề mới liên tục. Từ phía bên kia, gần số lượng liên tục của các chủ đề trong Giám sát hiệu suất nói rằng Chủ đề được tạo ra thay cho những người tái chế.

ThreadPool tài liệu hướng dẫn lớp:

Bắt đầu với .NET Framework 4, hồ bơi thread tạo ra và phá hủy đề người lao động để tối ưu hóa thông lượng, được định nghĩa là số lượng công việc mà hoàn toàn trên một đơn vị thời gian. Quá ít luồng có thể không sử dụng tối ưu các tài nguyên có sẵn, trong khi quá nhiều luồng có thể làm tăng sự tranh chấp tài nguyên.

Vì vậy, tôi nghĩ rằng hành vi ứng dụng của bạn là vì ThreadPool.

+0

@Brian Rasmussen Cảm ơn bạn – VMAtm

1

Có thể xử lý các chuỗi đã chấm dứt. Vì vậy, các chủ đề được tạo ra, chấm dứt, nhưng xử lý vẫn còn.

Bắt đầu quá trình giám sát (procmon.exe) và đặt nó để nghe "Quy trình và hoạt động chủ đề" (vô hiệu hóa tệp, đăng ký và mạng). Xác định, ai đang tạo chủ đề bằng cách nhấp đúp vào chuỗi tạo sự kiện và nhìn vào ngăn xếp.

Điều đó sẽ trả lời câu hỏi đang tạo chủ đề. Anh ta chịu trách nhiệm đóng chốt.

Các vấn đề liên quan