阿里云上:“黑色10秒鐘”的新進展
什么是“黑色10秒鐘”?
“黑色10秒鐘”是一種故障特征,每次發(fā)生時都持續(xù)10秒鐘。在這10秒鐘期間,IIS只接收請求,不響應請求,等10秒鐘一過,這些未響應的請求會一起響應。如果你在“黑色10秒鐘”的第1秒訪問網(wǎng)站,要等10秒鐘之后才能看到頁面。
“黑色10秒鐘”發(fā)生的場景
問題發(fā)生于安裝了Windows Server 2008 R2的阿里云云服務器上(宿主機是Linux/Xen),在Linux云服務器上不會出現(xiàn)(因為阿里云在Linux虛機的內(nèi)核中禁用了CONFIG_PARAVIRT_SPINLOCKS)。
引發(fā)“黑色10秒鐘”的原因
由于Linux內(nèi)核Xen部分對SpinLock處理的bug(Linux 3.2.0-39.62已修復該bug),只要在虛擬機中用到了SpinLock,并最終使用了xen的pv spinlock(pv=paravirtualization,),進行了hypercall調(diào)用,就有引發(fā)“黑色10秒鐘”的可能。
而在IIS 7.5的WAS(Windows Process Activation Service)中的確用到了SpinLock,可以從WAS進程的堆棧信息中知曉(見下圖)。

“黑色10秒鐘”的解決思路
1. 從虛擬機層面
對于Linux虛擬機,可以通過修改Linux內(nèi)核(禁用CONFIG_PARAVIRT_SPINLOCKS)或者升級至Linux 3.2.0-39.62解決問題。
對于Windows虛擬機(Windows Server 2008 R2),除了微軟,沒有人可以讓WAS不使用SpinLock,***可以寄希望的就是微軟在Windows Server 2012的IIS8中放棄了SpinLock的使用(胡思亂想一下,也許微軟的Hyper-V也面臨過這個虛擬化的問題)。
2. 從宿主機層面
升級宿主機的Linux/Xen。
“黑色10秒鐘”的解決嘗試
昨天晚上,我們將虛擬機中的Windows換成了Windows Server 2012進行測試,驚喜地發(fā)現(xiàn):

不見SpinLock的身影!在Windows Server 2012的IIS8中,WAS沒有使用SpinLock。也就是說在Windows Server 2012中不會出現(xiàn)“黑色10秒鐘”。
我們對“黑色10秒鐘”問題的看法
“黑色10秒鐘”問題不僅僅是阿里云的問題,不僅僅是Linux/Xen的問題,也不僅僅是Windows的問題,它是虛擬化技術(shù)發(fā)展中要解決的一個問題。虛擬化技術(shù)是云計算發(fā)展的基石,所以我們覺得花時間學習它、研究它、思考它、分享它是有價值的。而且開發(fā)人員也越來越離不開它,因為未來的大多數(shù)程序都是運行在虛擬機中的。
原文鏈接:http://www.cnblogs.com/cmt/archive/2013/06/01/3112725.html