Làm thế nào bạn có thể biết w3wp.exe đang làm gì? (hoặc cách chẩn đoán vấn đề về hiệu suất)


42

Tôi đang gặp vấn đề về hiệu suất trong một trang web chúng tôi đã tạo và tôi không chắc chắn chính xác làm thế nào để bắt đầu chẩn đoán nó.

Mô tả ngắn gọn là: Chúng tôi có một trang web rất nhỏ ( http://apserablog.com ) với lưu lượng truy cập rất ít, trong một máy chủ chuyên dụng xảo quyệt, CPU luôn rất cao, đôi khi nó ở mức 100% trong vài phút và w3wp.exe đang chiếm phần lớn trong số đó. Một kịch bản điển hình là w3wp.exe chiếm 60% và SQL Server chiếm khoảng 30%. DB của chúng tôi cũng khá nhỏ.

Mô tả dài và chi tiết hơn:

  • Trang web được lưu trữ trong một máy chủ rất nhảm nhí của Cari.Net. Ngay từ đầu, chúng tôi đã có cảm giác rằng máy chủ không hoạt động chính xác, giống như một số thứ sẽ mất quá nhiều thời gian, vì vậy đây có thể là một vấn đề cấu hình ngay từ đầu. Cũng có thể là chúng tôi đang có một máy chủ ảo trong khi chúng tôi phải có một máy chủ chuyên dụng, mặc dù chúng tôi không có bằng chứng nào cho thấy điều này, ngoại trừ thực tế là máy chủ có xu hướng khá chậm.

  • Máy chủ là Windows 2008 Standard 64-bit, với SQL 2008 Express

  • Phần cứng là Celeron 2.80 GHz, RAM 1Gb

  • Trang web được phát triển trong ASP.Net MVC, sử dụng Entity Framework để truy cập dữ liệu.

  • Bây giờ, đây là phần cứng khá nhảm nhí, nhưng tôi đã có các máy chủ khác với những kẻ này, với CTNH tương đương (hoặc tệ hơn), và hiệu suất tốt hơn nhiều so với máy chủ này. Điều đó nói rằng, các máy chủ khác có W2003 và SQL2005 và tôi đang sử dụng ASP.Net "WebForms" 2.0, không MVC, không LINQ, không EF; Vì vậy, tôi không chắc chắn liệu đến năm 2008 / những thứ khác có nghĩa là một hình phạt hiệu suất lớn được mong đợi hay không.

  • Tôi đang phục vụ các tệp MP3 (5-20 Mb) thường xuyên, đây là một tải hơi bất thường, có lẽ điều đó gây ra một số vấn đề?
    Điều đó có khiến w3wp sử dụng nhiều CPU không?

  • Sử dụng đĩa có vẻ rất thấp. Bộ nhớ thường khoảng 90%, nhưng việc sử dụng đĩa dường như cho thấy nó không phân trang nhiều.

  • Tôi nhận được rất nhiều email mỗi ngày về thời gian chờ SQL, cho các truy vấn mất hơn 30 giây, mặc dù tất cả các truy vấn của chúng tôi khá đơn giản (hoặc nên như vậy, nhưng EF có thể làm hỏng nó).

Đây là màn hình tài nguyên trông giống như một trong những "chạy nước rút" của CPU 100%, trong trường hợp có bất cứ điều gì hữu ích ở đó.

văn bản thay thế

Và một ảnh chụp nhanh của một số quầy hiệu suất: văn bản thay thế

Bây giờ, điều làm tôi bối rối rất nhiều là việc sử dụng CPU của w3wp chỉ là quá cao. Nó thực sự không nên làm gì nhiều ... Vì vậy, câu hỏi của tôi là ...

  • Có cách nào để tìm ra "những gì" nó đang làm không? Thậm chí có thể hồ sơ nó?
  • Bất kỳ quầy hiệu suất tôi nên xem xét?
  • Đây có phải là dự kiến ​​cho cấu hình phần cứng / phần mềm này?
  • Đây có phải là nguyên nhân của một số lỗi cấu hình, bạn sẽ bắt đầu tìm kiếm ở đâu?

Cảm ơn rât nhiều.
Daniel Magliola

Câu trả lời:


42

Bạn cũng có thể sử dụng giao diện người dùng quy trình công nhân trong IIS Manager và kiểm tra các yêu cầu hiện đang thực thi và xem chúng đang bị kẹt ở đâu nếu có. Mở IIS Manager-> Nhấp vào Máy chủ trong Cây-> Double Click Biểu tượng quy trình công nhân-> Nhấp đúp vào Quy trình công nhân đang tiêu thụ CPU để xem các yêu cầu hiện đang thực thi trong thời gian thực để bạn có thể xem mô-đun nào đang mất thời gian.

Ngoài ra, hãy cân nhắc sử dụng Truy tìm yêu cầu thất bại để theo dõi một số thời gian cho mỗi yêu cầu để xem nơi họ đang mất nhiều thời gian.


2
Điều này đầy hứa hẹn, nó thực sự nghe giống như những gì tôi muốn thấy, nhưng thực sự những màn hình đó hiển thị trống rỗng. Nó rõ ràng chỉ hiển thị các yêu cầu mất nhiều thời gian hơn một giây, theo dấu hiệu lớn ở trên và không có yêu cầu nào của chúng tôi rõ ràng, vì danh sách trống. Bất kỳ ý tưởng về làm thế nào để làm cho nó hiển thị nhiều yêu cầu hơn? Làm cách nào để hạ bộ lọc 1s? Cảm ơn!
Daniel Magliola

1
Bạn có thể nhập 0 vào bộ lọc và nhấp vào Đi, sẽ đặt thành 0 giây. Ngoài ra, bạn có thể chạy từ một dấu nhắc lệnh nâng cao "% Windir% \ system32 \ inetsrv \ appcmd.exe yêu cầu danh sách"
Carlos Aguilar Mares

1
Cảm ơn Carlos rất nhiều! Đây là những gì tôi đã làm để tìm ra một yêu cầu (Một cron chúng tôi có) đã giết chết máy chủ của tôi cứ sau 5 phút (mất 3,5 phút để chạy, vì vậy nó gần như liên tục ở mức CPU 100%). Cảm ơn!!!
Daniel Magliola

1
Giao diện người dùng này cho tôi biết URL nào đã được truy cập; thật không may, nó là một POST cho một dịch vụ web asmx và dữ liệu đó không có sẵn. (headbang)
Ross Presser

5

Ok, để bắt đầu - máy chủ thật sự rất nhảm nhí. Nhưng nó NÊN là đủ.

  • Để ảo hóa, kiểm tra trình điều khiển của bạn. Tôi biết rằng không có nền tảng virutalization nào che giấu CPU (và tôi đã kết hợp ai đó đưa hyper-v hoặc esx lên celeron) nhưng các trình điều khiển cho đĩa, v.v.

  • CPU không nên cao như vậy. Đáng buồn thay, với RAM này, bạn sẽ có rất nhiều bánh mì nướng - nếu bạn bắt đầu thêm một trình hồ sơ, bạn sẽ làm hỏng bộ nhớ bạn có.

Tôi sẽ:

  • Kiểm tra các bản ghi cho công cụ thực hiện tại thời điểm này.
  • Nâng cấp HĐH lên 2008 R2 - RẤT NHIỀU thông tin có sẵn ở đó.

Để thử nghiệm:

  • Trong môi trường dev của bạn tạo một bản sao của trang web và chạy một số bài kiểm tra hiệu suất.
  • Làm hồ sơ ở đó.
  • Sử dụng Theo dõi REquest không thành công để tìm ra yêu cầu nào thất bại.

http://learn.iis.net/page.aspx/266/troubledhoot-fails-requests-USE-tracing-in-iis-7/

có một số bắt đầu từ đó. Điều này có thể cung cấp cho bạn một gợi ý trong trường hợp các vấn đề nhiều hơn - hm - "có thể phân loại".

Tôi cũng sẽ giữ nhật ký hiệu suất dài hạn. Coi chừng IO của bạn (giây / đọc, Giây / ghi là khá nhiều thứ duy nhất có liên quan). Tất cả phần còn lại là IO khôn ngoan quá mơ hồ - nhưng một khi IO của bạn bắt đầu mất nhiều thời gian hơn bình thường, các đĩa sẽ bị tụt lại phía sau.

Tôi sẽ loại trừ một vấn đề cấu hình tại thời điểm này - ít nhất là chỉ báo chính. Một cái gì đó sử dụng hết nguồn tài nguyên W3p của bạn, bây giờ bạn cần tìm hiểu nó là gì.

Nói chung, đây không phải là một máy chủ mà tôi thích có vật lý - nó quá nhỏ, không có nghĩa gì IMHO đối với máy móc ở đó. Ảo sẽ tốt hơn;)


Cảm ơn bạn rất nhiều vì câu trả lời của bạn. Một số câu hỏi: Nhật ký nào bạn sẽ kiểm tra để thực hiện công cụ tại thời điểm này? (xin lỗi nếu đây là câu hỏi của người mới) - Nâng cấp hệ điều hành: Chúng tôi có thể thử điều đó, nhưng tôi sợ nó có thể phá vỡ mọi thứ, có lẽ, điều này an toàn đến mức nào? - Môi trường dev: Vấn đề là trong môi trường dev của tôi nó hoạt động tốt. CPU không đáng kể, yêu cầu không thất bại, v.v.
Daniel Magliola

Đối với nhật ký I / O: Tôi vừa thêm các bộ đếm bạn đề cập và tất cả đều ở mức 0 trong khi CPU ở mức cao. Tôi vừa thêm một ảnh chụp màn hình của một số quầy hiệu suất tôi đang xem. Tôi biết một ảnh chụp nhanh không nói lên toàn bộ câu chuyện, nhưng những giá trị đó có xu hướng khá ổn định. Bạn có nghĩ rằng số lượng kết nối hiện tại (mà tôi không có lời giải thích cho) có thể là một vấn đề? Bất kỳ ý tưởng về làm thế nào để tìm ra những kết nối đang yêu cầu / làm gì? Bất kỳ quầy nào khác mà bạn nghĩ có thể hữu ích để chẩn đoán một cái gì đó như thế này?
Daniel Magliola

Chà, R2 khá an toàn. Tôi nâng cấp mọi thứ và không bao giờ có vấn đề. Dù sao đi nữa .... đây là một vấn đề về CPU và việc đóng đinh có thể rất tệ, đặc biệt là bạn không đủ RAM để cài đặt một trình lược tả. Tôi thực sự sẽ cố gắng cài đặt lại hoàn toàn. Có, hút, nhưng điều đó có nghĩa là bạn có thể cài đặt R2 mới và xem vấn đề có còn tồn tại không. Điều tồi tệ là bạn không có một hệ thống dự trữ, vì vậy bạn không thể xác định được vấn đề là "cục bộ" hay tổng quát hơn. Ngoài ra: dừng IIS, xóa tất cả các thư mục tạm thời đang sử dụng
TomTom

để biên dịch và xem những gì xảy ra khi bạn khởi động lại. Với R2, bạn có thể thấy nếu / tập tin nào được IIS mở. Đây có phải là một ứng dụng web cục bộ không, hay nó cũng ở đó nếu tất cả các trang web bị dừng? Điều tiếp theo cần thử - tắt tất cả các trang web và tìm ra cái nào phá vỡ mọi thứ.
TomTom

Cuối cùng, vấn đề với các máy chủ ảo là, theo như tôi đã tìm thấy, cuối cùng chúng tôi phải trả nhiều hơn hoặc tương tự cho cùng một phần cứng, cộng với, hóa đơn băng thông là kẻ giết người (hãy nhớ rằng chúng tôi phục vụ các tệp âm thanh). Chúng tôi sẽ chuyển sang một máy chủ lớn hơn nếu chúng tôi phải, nhưng thành thật mà nói, với lưu lượng chúng tôi có, phải có một số vấn đề, chúng tôi không nên sử dụng CPU 100% bao giờ ..
Daniel Magliola

4

Bạn có thể thử sử dụng một chương trình có tên Process Explorer để theo dõi các luồng riêng lẻ chạy theo quy trình w3wp. Nó sẽ cho phép bạn xem những gì chủ đề gây ra tất cả các thiệt hại.


3

Tôi đã rất may mắn khi sử dụng Công cụ chẩn đoán gỡ lỗi của Microsoft để xử lý quy trình w3wp của mình và sau đó kiểm tra các luồng và ngăn xếp dấu vết cho những thứ đang bị khóa. Nó thậm chí sẽ cho bạn biết trang được yêu cầu tạo ra chủ đề cực kỳ hay .

http://www.microsoft.com/en-us/doad/details.aspx?id=26798


1

Tôi đồng ý với TomTom, đặc biệt là về việc đạt được số dặm tốt hơn từ Virtual vào thời điểm này. Gỡ lỗi / lược tả cục bộ để thu hẹp vấn đề là điều nên làm.

Tôi sẽ đội chiếc mũ và áo choàng Karnak The Magnificent của tôi và yêu cầu phong bì đầu tiên. Cuộc nổi loạn của Ram. Bạn nhận được gì khi đặt HĐH, ASP.NET và SQL Server Express tham lam vào 1GB.

Tôi tin rằng vấn đề của bạn là SQL Server Express đang thu hút tất cả RAM có sẵn cho Bộ đệm và bị chậm phát hành. Xem http://support.microsoft.com/kb/321363 để biết thêm thông tin. Ngoài ra, IIS có bộ đệm mặc định 256 MB mà bạn có thể cần phải điều chỉnh ( https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage ). Gỡ lỗi Chẩn đoán là một công cụ tuyệt vời để khắc phục sự cố này (ok, có thể là búa tạ).

http://technet.microsoft.com/en-us/l Library / bb742546.aspx là một bài viết khá hay để xem. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e để tái chế nhóm ứng dụng phát điên vì một vấn đề khác có thể xảy ra.


1

Sử dụng bộ đếm "Process" của Perfmon để xem các thuộc tính riêng lẻ của quy trình w3wp.exe. Bao nhiêu thời gian CPU cho quá trình worker là thời gian kernel? Thời gian nhân cao có thể là dấu hiệu của việc phân trang, nhưng bạn nói rằng bạn không bị thuyết phục. Các khả năng khác là trình điều khiển duff. Quá trình worker có 23 luồng hoạt động, điều này tốt, nhưng họ đang làm gì? Hãy thử ProcessExplorer của SysIternals để tìm hiểu thêm một chút; bạn cũng có thể xem các kết nối TCP / IP đang hoạt động. Tôi chưa sử dụng SQL Express, nhưng nó có các tham số điều chỉnh bộ nhớ, như người anh lớn của nó. Là SQL bỏ đói IIS của bộ nhớ, gây ra phân trang quá mức?


Hãy xem liệu tôi có làm đúng không ... Tôi đã thêm% bộ xử lý thời gian và% bộ đếm thời gian của người dùng, cả hai cho quá trình w3wp và cả hai đều khớp với nhau hoàn hảo mọi lúc. Điều đó có nghĩa là không có thời gian hạt nhân, hoặc tôi đang nhìn sai cách này? (xin lỗi, tôi là người mới ở đây)
Daniel Magliola

0

Nó có thể không hoàn toàn liên quan, nhưng xác minh xem bạn có đang sử dụng NOLOCK trong các truy vấn của mình không. Nó có thể giúp trong trường hợp hết thời gian SQL.

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.