阿里云上:“黑色30秒”走了,?“黑色1秒”來(lái)了,真相也許大白了
云上真是無(wú)奇不有,這兩天我們什么也沒(méi)動(dòng),“黑色30秒”招呼不打一聲就走了,而來(lái)了一位不速之客——“黑色1秒”;就寫(xiě)了一篇博文,30秒就變成了1秒,看來(lái)多寫(xiě)博客是硬道理。在上篇博文的評(píng)論中有人說(shuō)——就30秒,有必要這么較真嗎——當(dāng)時(shí)想,別說(shuō)30秒,哪怕1秒,我們也會(huì)較真。結(jié)果說(shuō)1秒,1秒就來(lái)了。
云上真是無(wú)奇不有,這兩天我們什么也沒(méi)動(dòng),“黑色30秒”招呼不打一聲就走了,而來(lái)了一位不速之客——“黑色1秒”;就寫(xiě)了一篇博文,30秒就變成了1秒,看來(lái)多寫(xiě)博客是硬道理。
在上篇博文的評(píng)論中有人說(shuō)——就30秒,有必要這么較真嗎——當(dāng)時(shí)想,別說(shuō)30秒,哪怕1秒,我們也會(huì)較真。結(jié)果說(shuō)1秒,1秒就來(lái)了。
我們看一下“黑色1秒”的情況(以下是今天上午Windows性能監(jiān)視器的一次截圖)。
1. ASP.NET的QPS(Requests/Sec)為0
在10:10:39的時(shí)候,QPS為0(就出現(xiàn)了1秒)。這是“黑色1秒”期間最顯著的特征,我們一開(kāi)始也是通過(guò)這個(gè)特征發(fā)現(xiàn)“黑色1秒”的。
QPS為0是一種什么狀況呢?請(qǐng)看下圖:
QPS為0是因?yàn)镮IS應(yīng)用程序池沒(méi)有收到底層轉(zhuǎn)發(fā)過(guò)來(lái)的請(qǐng)求,從上圖中可以看出到達(dá)應(yīng)用程序池之前的請(qǐng)求處理流程是這樣的:HTTP.SYS->WWW service->WAS。由此我們可以推斷,如果這3環(huán)節(jié)有一個(gè)地方卡住了,就會(huì)造成應(yīng)用程序池收不到請(qǐng)求,從而QPS為0;當(dāng)然,這有個(gè)前提條件——請(qǐng)求已經(jīng)到達(dá)了HTTP.SYS的處理隊(duì)列。
接下來(lái),我們就來(lái)找數(shù)據(jù)驗(yàn)證請(qǐng)求是否到達(dá)了HTTP.SYS的處理隊(duì)列。
2. Arrival Rate不為0
在QPS為0的時(shí)間點(diǎn)10:10:39,Arrival Rate的值在472-102之間(性能監(jiān)視器上點(diǎn)不出這個(gè)時(shí)間點(diǎn)的數(shù)值),說(shuō)明有請(qǐng)求到達(dá)了HTTP.SYS。
那這能不能說(shuō)明HTTP.SYS當(dāng)時(shí)是正常呢?
HTTP.SYS不能逃脫嫌疑,因?yàn)锳rrival Rate表示的是"Rate at which requests are arriving in the queue",只是代表請(qǐng)求到了HTTP.SYS的隊(duì)列。如果HTTP.SYS的線程卡住了,請(qǐng)求還是能照常到達(dá)HTTP.SYS的隊(duì)列。
通過(guò)Arrival Rate的數(shù)據(jù)分析,造成QPS為0的嫌疑對(duì)象只剩下3個(gè):HTTP.SYS,WWW service,WAS。
分析到這里,自然就想起了去年遭遇的“黑色10秒”,當(dāng)時(shí)的表現(xiàn)也是QPS為0,最后發(fā)現(xiàn)是卡在了WAS(Windows Process Activation Service),詳見(jiàn)云計(jì)算之路-阿里云上:超級(jí)奇怪的“黑色10秒鐘”。
這次會(huì)不會(huì)也是卡在WAS呢?
上次將最大的嫌疑對(duì)象鎖定在WAS是因?yàn)樵诠收掀陂g,IIS日志中有靜態(tài)文件的響應(yīng)記錄(從HTTP.SYS緩存返回的),證明了HTTP.SYS當(dāng)時(shí)是正常的。
所以,接下自然要去看IIS日志。
3. QPS為0的前1秒IIS日志中竟然無(wú)任何記錄
在QPS為0發(fā)生的時(shí)間點(diǎn)10:10:39的前1秒——10:10:38,IIS日志中竟然無(wú)任何記錄(這也是無(wú)意中發(fā)現(xiàn)的,開(kāi)始是通過(guò)10:10:39這個(gè)時(shí)間點(diǎn)去查詢(xún),是有記錄的)。而這個(gè)時(shí)間點(diǎn)(10:10:38)的前1秒、后1秒都有記錄。
(上圖所用工具是Log Parser Studio)
這是啥情況?
有兩點(diǎn)很重要:1)記錄IIS日志是HTTP.SYS干的活;2)HTTP.SYS是在將響應(yīng)內(nèi)容發(fā)給客戶(hù)端后,收到客戶(hù)端的TCP確認(rèn)包后記錄的。
由于Arrival Rate有數(shù)據(jù),說(shuō)明不是因?yàn)闆](méi)有請(qǐng)求到達(dá)造成IIS日志無(wú)記錄。
那是不是因?yàn)榫W(wǎng)絡(luò)問(wèn)題造成HTTP.SYS沒(méi)收到TCP確認(rèn)包?這個(gè)可以通過(guò)HTTP ERROR日志進(jìn)行確認(rèn),日志文件在C:\Windows\System32\LogFiles\HTTPERR文件夾中,對(duì)應(yīng)的時(shí)間點(diǎn)并沒(méi)有TCP錯(cuò)誤。
所以,造成IIS日志無(wú)記錄的嫌疑對(duì)象應(yīng)該在HTTP.SYS以及上層處理環(huán)節(jié),結(jié)合第1部分對(duì)QPS為0的分析,還是這三者:HTTP.SYS,WWW service,WAS。
不管從上到下,還是從下到上,都是HTTP.SYS,WWW service,WAS。
【進(jìn)一步分析】
本來(lái)準(zhǔn)備寫(xiě)這篇博客時(shí),還打算分析性能監(jiān)視器中的其他指標(biāo)。在寫(xiě)的過(guò)程中,與曾經(jīng)的“黑色10秒”進(jìn)行對(duì)比時(shí),突然恍然大悟!再次驗(yàn)證了多寫(xiě)博客是硬道理!
恍然大悟的是什么呢?
三個(gè)嫌疑對(duì)象分別是HTTP.SYS,WWW service,WAS,在“黑色10秒”中IIS日志中有靜態(tài)文件的記錄(來(lái)自HTTP.SYS的緩存),說(shuō)明HTTP.SYS是正常的;而在“黑色1秒”中,IIS日志中沒(méi)有任何記錄,顯然說(shuō)明了HTTP.SYS當(dāng)時(shí)是不正常的。也就是說(shuō)HTTP.SYS卡住了1秒種,更準(zhǔn)確地說(shuō)是HTTP.SYS的所有處理線程卡住了1秒。
當(dāng)HTTP.SYS卡住時(shí),請(qǐng)求轉(zhuǎn)發(fā)不到上層,應(yīng)用程序池收不到請(qǐng)求,ASP.NET沒(méi)活干,QPS自然為0。
當(dāng)HTTP.SYS卡住時(shí),ASP.NET處理完的請(qǐng)求發(fā)不出去,IIS日志中自然沒(méi)記錄,而且記錄日志就是HTTP.SYS干的活。
于是,我們的分析結(jié)論是“黑色1秒”就是HTTP.SYS卡住了1秒。
而且卡住之后的1秒的IIS日志也證明了這一點(diǎn)。
從日志分析中看,很多請(qǐng)求time-taken都超過(guò)了1s,超過(guò)1s恰恰是因?yàn)镠TTP.SYS卡住了1秒。
阿里云SLB的日志也進(jìn)一步證明了這一點(diǎn)。
所以性能監(jiān)視器上的表現(xiàn)只是HTTP.SYS卡住的結(jié)果:
為什么性能監(jiān)視器中QPS為0的發(fā)生點(diǎn)比IIS卡住要晚1秒呢,我們覺(jué)得可能是性能監(jiān)視器采樣周期的原因。
真相大白了?“黑色1秒”問(wèn)題可以劃上圓滿(mǎn)的句號(hào)了?不,沒(méi)這么簡(jiǎn)單!
【大膽猜想】
就在我們寫(xiě)博客的期間,又來(lái)了一個(gè)新的不速之客——“黑色5秒”。
黑色10秒,黑色30秒,黑色1秒,黑色5秒。。。就叫黑色n秒吧。
不管黑色多少秒,這些都只是問(wèn)題的表象,而真正的黑色在虛擬機(jī)層面,更準(zhǔn)確地說(shuō)就是Xen。
在某種觸發(fā)條件下,Windows中的線程在Xen的虛擬化處理中會(huì)被卡住。
黑色10秒,是因?yàn)閃AS被卡住,從Windows Server 2008升級(jí)至Windows Server 2012只是避開(kāi)了問(wèn)題的觸發(fā)條件。
黑色30秒,是因?yàn)锳SP.NET的線程被卡住。
黑色1秒,是因?yàn)镠TTP.SYS的線程被卡住。
黑色5秒,不用管它了,如果問(wèn)題不解決,還有更多的黑色n秒。。。
這就是我們的大膽猜想,這就是我們被“黑”無(wú)數(shù)次之后,最讓我們確信的一個(gè)猜想!
而我們能做的也只是猜想,下面就看阿里云的了!
【最新進(jìn)展更新】
2014年5月9日 10:43,阿里云懷疑可能是Windows更新補(bǔ)丁引起的,準(zhǔn)備將系統(tǒng)回滾至之前的某個(gè)時(shí)間點(diǎn)進(jìn)行觀察。
2014年5月10日 10:15:58,再次出現(xiàn)“黑色1秒”(服務(wù)器上安裝Windows補(bǔ)丁的最新時(shí)間是2014年3月5日)。
相關(guān)文章
Windows server 2008 R2遠(yuǎn)程桌面3389端口的修改方法
這篇文章主要為大家詳細(xì)介紹了Windows server 2008 R2遠(yuǎn)程桌面3389端口的修改方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09安裝IIS發(fā)布我的第一個(gè)網(wǎng)站圖文教程
這篇文章主要為大家詳細(xì)介紹了安裝IIS的詳細(xì)過(guò)程,并發(fā)布我的第一個(gè)網(wǎng)站,很好的圖文教程,感興趣的小伙伴們可以參考一下2016-05-05Windows Server 2016 Nginx 安裝配置詳細(xì)圖文教程
這篇文章主要介紹了Windows Server 2016 Nginx 安裝配置詳細(xì)圖文教程,需要的朋友可以參考下2017-08-08如何遠(yuǎn)程管理連接云主機(jī)和VPS(服務(wù)器)
這篇文章主要介紹了如何遠(yuǎn)程管理連接云主機(jī)和VPS(服務(wù)器),通過(guò)遠(yuǎn)程工具就像本地操作電腦一樣方便,需要的朋友可以參考下2014-11-11Windows Server 修改遠(yuǎn)程桌面端口的實(shí)現(xiàn)
本文主要介紹了Windows Server 修改遠(yuǎn)程桌面端口的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06Windows服務(wù)器應(yīng)對(duì)高并發(fā)和DDOS攻擊的配置方法
這篇文章主要介紹了Windows服務(wù)器應(yīng)對(duì)高并發(fā)和DDOS攻擊的配置方法,本文講解了應(yīng)對(duì)高并發(fā)請(qǐng)求、應(yīng)對(duì)DDOS攻擊的多種配置方法,需要的朋友可以參考下2015-01-01探析Windows下將gvim8配置為Python IDE的方法
Windows下將gvim8配置為Python IDE,首先我們需要把安裝包或者文件下載好,然后才能做安裝配置工作,具體的操作方法在本文給大家介紹的非常詳細(xì),感興趣的朋友參考下2016-10-10HTTPERR的日志中出現(xiàn)大量Timer_MinBytesPerSecond,Timer_ConnectionIdle錯(cuò)
在\LogFiles\HTTPERR的日志中發(fā)現(xiàn)了大量Timer_MinBytesPerSecond,Timer_ConnectionIdle錯(cuò)誤,這里簡(jiǎn)單介紹下原因2013-05-05IIS7,IIS7.5 升級(jí)PHP5.3后站點(diǎn)變慢的解決方法
大多數(shù)PHP頁(yè)面實(shí)際上都是數(shù)據(jù)庫(kù)驅(qū)動(dòng)的,要連接數(shù)據(jù)庫(kù)才能顯示出來(lái),而響應(yīng)時(shí)間過(guò)長(zhǎng)的原因便在于PHP 5.3連接數(shù)據(jù)庫(kù)的方式有所改變,這里簡(jiǎn)單給大家分享下, 方便需要的朋友2014-07-07