Tôi có tình huống lạ trên máy chủ sản xuất. Kết nối cho asp.net được xếp hàng đợi nhưng CPU chỉ ở mức 40%. Cơ sở dữ liệu cũng chạy tốt với CPU 30%.Ứng dụng Asp.net chậm nhưng CPU ở mức tối đa 40%
Một số lịch sử hơn theo yêu cầu trong các ý kiến:
- Trong giờ cao điểm các trang web được khoảng 20.000 khách một giờ.
- Trang web này là một ứng dụng webforms asp.net với rất nhiều AJAX/POSTS
- Trang web này sử dụng rất nhiều tài khoản tạo ra nội dung
- Chúng tôi đo hiệu suất của trang web với một testpage mà nhấn cơ sở dữ liệu và các dịch vụ web được trang web sử dụng. Trang này được phân phối trong vòng một giây khi tải bình thường. Whe xác định ứng dụng là chậm khi yêu cầu mất hơn 4 giây.
- Từ các phép đo, chúng ta có thể thấy rằng connectiontime là nhanh, nhưng thời gian xử lý lớn.
- Chúng tôi không thể xác định phản hồi chậm theo yêu cầu duy nhất, trang web chạy tốt trong giờ bình thường nhưng bị chậm trong giờ cao điểm
- Chúng tôi gặp sự cố rằng trang web bị ràng buộc CPU (còn gọi là 100%), chúng tôi cố định rằng
- Chúng tôi cũng gặp sự cố với ngoại lệ đã bắt đầu khởi động lại appdomain, chúng tôi đã khắc phục điều đó
- Trong giờ cao điểm, tôi xem qua các bộ đếm hiệu suất asp.net. Chúng ta có thể thấy hành vi mà chúng ta có 600 kết nối hiện tại với 500 kết nối được xếp hàng đợi.
- Tại thời gian cao điểm CPU là khoảng 40% (mà làm cho tôi nghĩ rằng nó không phải là CPU bị ràng buộc)
- bộ nhớ vật lý là khoảng 60% sử dụng
- Tại thời gian cao điểm CPU DatabaseServer là khoảng 30% (trong đó khiến tôi nghĩ rằng đó không phải là cơ sở dữ liệu bị ràng buộc)
Kết luận của tôi là việc ngăn máy chủ xử lý yêu cầu nhanh hơn. nghi phạm có thể
- Deadlocks (syncblk chỉ cung cấp cho một khóa!)
- Disk I/O (kiểm tra qua Sysinternals procesexplorer: 3,5 MB/s)
- Thu gom rác (10 ~ 15% trong đỉnh)
- I/O mạng (thời gian kết nối vẫn còn thấp)
Để tìm hiểu xem các proces đang làm gì tôi tạo ra cho minidumps.
Tôi đã quản lý để tạo hai MemoryDumps cách nhau 20 giây. Đây là sản phẩm đầu tiên:
!threadpool
CPU utilization 6%
Worker Thread: Total: 95 Running: 72 Idle: 23 MaxLimit: 200 MinLimit: 100
Work Request in Queue: 1
--------------------------------------
Number of Timers: 64
và đầu ra của thứ hai:
!threadpool
CPU utilization 9%
Worker Thread: Total: 111 Running: 111 Idle: 0 MaxLimit: 200 MinLimit: 100
Work Request in Queue: 1589
Như bạn có thể thấy có rất nhiều yêu cầu trong Queue.
Câu hỏi 1: có nghĩa là có 1589 yêu cầu trong hàng đợi. Nó có nghĩa là một cái gì đó đang chặn?!
Danh sách threadpool chứa chủ yếu là những mục: Chức năng Unknown: 6a2aa293 Bối cảnh: 01cd1558 AsyncTimerCallbackCompletion TimerInfo @ 023a2cb0
Nếu tôi bạn vào chiều sâu với AsyncTimerCallbackCompletion
!dumpheap -type TimerCallback
Sau đó, tôi nhìn vào các đối tượng trong TimerCallback và hầu hết trong số chúng là các loại:
System.Web.SessionState.SessionStateModule
System.Web.Caching.CacheCommon
Câu hỏi 2: Có phải bất kỳ ý nghĩa nào đối với những đối tượng đó là một bộ hẹn giờ và quá nhiều? Tôi có nên ngăn chặn điều này không. Và làm thế nào?
Câu hỏi chính tôi có bỏ lỡ bất kỳ vấn đề rõ ràng nào tại sao tôi xếp hàng kết nối và không tối đa CPU?
Tôi đã thành công trong việc tạo một sự cố trong thời gian cao điểm. Phân tích nó với debugdiag đã cho tôi cảnh báo này:
Detected possible blocking or leaked critical section at webengine!g_AppDomainLock owned by thread 65 in Hang Dump.dmp
Impact of this lock
25.00% of threads blocked
(Threads 11 20 29 30 31 32 33 39 40 41 42 74 75 76 77 78 79 80 81 82 83)
The following functions are trying to enter this critical section
webengine!GetAppDomain+c9
The following module(s) are involved with this critical section
\\?\C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\webengine.dll from Microsoft Corporation
Tìm kiếm nhanh trên google không cho tôi bất kỳ kết quả nào. Có ai đó có một đầu mối?
Bạn đã thử và đo tốc độ từ Firebug chưa? xem phần nào tải dài nhất .. sau đó bắt đầu từ đó. – Arief
Điều này rất khó chẩn đoán khi sử dụng thông tin spotty mà bạn cung cấp. Có lý do nào bạn bắt đầu bằng cách xem xét các bãi rác không? Ứng dụng ASP.NET của bạn có bị lỗi không? Nếu vậy, tại sao phân loại này như là một vấn đề hiệu suất? –