今天下午訪問高峯的時候,主站的Web服務器出現奇怪的問題,開始是2臺8核8G的雲服務器(ECS),後來又加了1臺8核8G的雲服務器,問題依舊。html
並且3臺服務器特意使用了不一樣的配置:1臺是禁用了虛擬內存的臨時磁盤雲服務器,1臺是啓用了虛擬內存的臨時磁盤雲服務器,1臺是禁用了虛擬內存的雲盤雲服務器。這樣排除了磁盤IO與虛擬內存的緣由。服務器
問題的表現是這樣的(如下監視截圖來自Windows性能監控器Performance Monitor):性能
1. ASP.NET請求執行時間(Request Execution Time)變慢阿里雲
一般請求執行時間在100ms如下,而出問題時居然達到了近1.5s,發生時間爲15:18:09。雲計算
2. IIS當前鏈接數(Current Connections)突增3d
IIS當前鏈接數一般在10左右,出現問題時先跳高至67,後跳高至270多,說明IIS處理請求的能力降低,開始發生的時間點是15:18:06。orm
可見IIS當前鏈接數突增早於ASP.NET請求執行時間變慢。htm
3. CPU佔用降低blog
CPU在15:18:07到達高點以後,一直往下掉,在15:18:14掉至最低點。內存
CPU降低發生於IIS當前鏈接數突增以後。
4. 請求出現排隊現象(Requests Queued)
Requests Queued正常狀況下是0,只有在請求處理不過來的時候纔會出現排隊現象。請求排隊開始於15:18:05,早於IIS當前鏈接數突增。
5. ASP.NET請求處理能力降低(Requests/Sec)
15:18:05開始,ASP.NET的請求處理能力降低,與請求排隊開始於同一時間。
咱們給上面的5個現象排個序:請求處理能力降低(Requests/Sec)-> 請求排隊(Requests Queued)-> 當前鏈接數突增(Current Connections)-> CPU佔用降低 -> 請求執行時間變慢(Request Execution Time)
而後再來看另一次問題發生時的現象:
1. Requests/Sec降低(棕色)與Requests Queued出現(藍色)
Requests Queued在高點達1007。
2. Request Execution Time變慢(紫色)與Current Connections突增(綠色)
Current Connections在高點達1586。
3. 加上CPU佔用率,5個指標疊在一塊兒
【分析】
Requests/Sec降低、Requests Queued上升、Request Execution Time變慢、Current Connections突增,這些說明在什麼地方卡住了;而CPU佔用降低說明不是由於負載高CPU處理不過來,而是卡在了其餘環節,好比IO。
以前遇到比這還奇怪的「黑色10秒鐘」(詳見雲計算之路-阿里雲上:超級奇怪的「黑色10秒鐘」),現象有點相似,但有2個地方不一樣:
1. 此次持續時間是30秒(因此把此次問題命名爲「黑色30秒」)。
2. 「黑色10秒鐘」期間Requests/Sec會降低爲0;而「黑色30秒」期間Requests/Sec只是降低,沒有爲0,也就是說還在處理請求,只是由於某些資源出現瓶頸,請求處理能力降低。
以前的「黑色10秒鐘」是由於虛擬化對spinlock的支持問題引發的,改用Windows Server 2012解決了問題。
此次呢?應用的問題,Windows的問題,仍是阿里雲的問題?這是個問題!目前還不知道從何處下手。
期待您的寶貴建議!