Làm cách nào tôi có thể điều tra việc sử dụng CPU 99% bằng w3wp.exe?


7

w3wp.exeđang hiển thị mức sử dụng CPU 99%. Các cách tốt nhất để điều tra nguyên nhân của việc sử dụng CPU cao này là gì?

Câu trả lời:


6

Đính kèm WinDbg + sos và chạy !runaway. Điều đó sẽ cho bạn thấy luồng nào đang chiếm nhiều thời gian CPU nhất. Làm một !clrstackchủ đề để tìm hiểu những gì nó đang làm.


4
Bạn có thể liên kết đến hoặc điền vào một số hướng dẫn để đính kèm một quy trình không? Tôi đã sử dụng Windows từ 3.11, lập trình trong một thập kỷ và không biết làm thế nào để làm điều đó.
Rob Allen

3
Cả WinDbg và Visual Studio (và nhiều trình gỡ lỗi khác) có thể đính kèm vào một quy trình để gỡ lỗi nó. Lý do tôi đề cập đến WinDbg là các phần mở rộng sos giúp việc tìm CPU ôm tương đối dễ dàng. Để biết thêm thông tin về WinDbg, vui lòng xem microsoft.com/whdc/devtools/debugging/default.mspx
Brian Rasmussen

nếu sự cố xảy ra trên máy chủ LIVE nhưng tôi không có quyền truy cập vào nó, bạn có đề xuất nào không.

Không có quyền truy cập, nó sẽ khó hơn rất nhiều để tìm hiểu. Hãy thử đi qua mã nguồn sau đó. Tìm kiếm các khóa trực tiếp tiềm năng, tiêu thụ bộ nhớ lớn (vấn đề có thể là quá nhiều thời gian dành cho việc thực hiện GC) và vv. Nếu không có thêm chi tiết, thật khó để đưa ra lời khuyên cụ thể.
Brian Rasmussen


2

w3wp.exelà quy trình công nhân ASP.NET, vì vậy nếu nó sử dụng tỷ lệ cao CPU của máy chủ thì chính ứng dụng ASP.NET đang gây ra sự cố. Tuy nhiên, điều này không nhất thiết chỉ ra rằng có vấn đề với ứng dụng ASP.NET. Nó có thể đang phục vụ quá nhiều yêu cầu với nguồn lực hạn chế. Biện pháp thực sự duy nhất là kiểm tra mức sử dụng CPU so với lượng lưu lượng được xử lý bởi ứng dụng.

Nếu bạn nghi ngờ rằng một yêu cầu nào đó mất quá nhiều thời gian, bạn có thể sử dụng tiện ích dòng lệnh Logparser để phân tích các logfiles của bạn và tìm trang nào có thời gian thực hiện dài.

c:\>logparser "select top 10 cs-uri-stem, time-taken from INSERT_YOUR_IIS_LOG_FILE_NAME.log group by cs-uri-stem order by time-taken desc" -q:on

Bạn cũng có thể sử dụng một công cụ để hiển thị những trang nào hiện đang thực thi, như IISPeek (không miễn phí).

Nếu bạn muốn đi sâu hơn, hãy cố gắng hiểu hwo để sử dụng WinDbg. Đây là một hướng dẫn tốt: Windows Debuggers: Phần 1: Hướng dẫn WinDbg


Bạn cũng cần phải có "thời gian" trong nhóm theo mệnh đề, nếu không kịch bản sẽ gây ra lỗi.
kafka

0

Tôi đã có vấn đề này không liên tục trước đây. Nó dường như tăng vọt đến 99% sau yêu cầu đầu tiên và không bao giờ đi xuống. Nếu tôi giết quá trình, quy trình worker mới thường hoạt động chính xác. Tôi chưa bao giờ hiểu tại sao điều này xảy ra.


0

Chúng tôi có cùng một vấn đề Greg ghi chú ở trên. Chúng ta chỉ đang giết những quá trình đó. Không quan sát điều này trên IIS6 / windows server 2003, chỉ trên IIS7 / windows server 2008.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.