我在生產服務器上出現了一種奇怪的情況。 asp.net連接排隊,但CPU只有40%。此外,數據庫在30%的CPU上運行良好。Asp.net應用程序運行緩慢,但CPU最多爲40%
如意見要求一些更多的歷史:
- 在高峯時段的網站得到一個小時左右的兩萬人次。
- 該網站是一個asp.net web表單應用程序有很多AJAX /職位的
- 該網站使用產生了大量用戶的內容
- 我們測量站點的性能與不打的數據庫和testpage該網站使用的網絡服務。在正常負載下,此頁面在一秒內得到處理。當請求花費超過4秒鐘時,將應用程序定義爲緩慢。
- 從測量結果我們可以看出連接時間很快,但處理時間很長。
- 我們無法確定單個請求的緩慢響應,網站在正常時段運行良好,但在高峯時段速度較慢
- 我們遇到了一個問題,即該網站受CPU限制(又名100%運行),我們修復
- 我們也遇到了例外問題,我們修復了這個問題
- 在高峯時段我會看看asp.net性能計數器。我們可以看到我們有500個當前連接和500個排隊連接的行爲。
- 在高峯時期的CPU爲40%左右(這讓我覺得它不是CPU綁定)
- 物理內存大約是使用60%
- 在高峯時期的DATABASESERVER CPU在30%左右(其中讓我覺得它不是數據庫綁定)
我的結論是,別的東西是阻止服務器更快地處理請求。可能的犯罪嫌疑人
- 死鎖(syncblk只給出了一個鎖!)
- 磁盤I/O(通過Sysinternals的procesexplorer檢查:3.5 MB /秒)
- 垃圾收集(10〜15峯期間%)
- 網絡I/O(連接時間仍然很短)
要了解我在創建小型轉儲程序時所做的操作。
我設法創建了兩個相隔20秒的MemoryDump。這是第一個輸出:
!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
和第二輸出:
!threadpool
CPU utilization 9%
Worker Thread: Total: 111 Running: 111 Idle: 0 MaxLimit: 200 MinLimit: 100
Work Request in Queue: 1589
正如你可以看到有很多隊列請求的。
問題1:這是什麼意思,在隊列中有1589個請求。這是否意味着阻礙了某些東西?!
線程池清單主要包含以下項目: 未知函數:6a2aa293語境:01cd1558 AsyncTimerCallbackCompletion TimerInfo @ 023a2cb0
如果我你與AsyncTimerCallbackCompletion
!dumpheap -type TimerCallback
然後深入我看看TimerCallback中的對象和大多數類型:
System.Web.SessionState.SessionStateModule
System.Web.Caching.CacheCommon
問題2:這些對象有一個計時器,這麼有意義嗎?我應該防止這一點。如何?
主要問題我錯過任何明顯的問題,爲什麼我排隊連接,並沒有最大限度的CPU?
我成功地在高峯期做出了故障轉儲。用debugdiag分析它給了我這個警告:
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
快速谷歌搜索不給我任何結果。有人有線索嗎?
您是否試圖測量Firebug的速度?看哪個部分加載最長..然後從那裏開始。 – Arief 2010-11-19 16:32:51
使用您提供的點狀信息來診斷這一點非常困難。你有沒有理由通過查看崩潰轉儲開始?你的ASP.NET應用程序崩潰了嗎?如果是這樣,爲什麼把這個分類爲性能問題呢? – 2010-11-19 18:00:38