雲計算之路-阿里雲上:“黑色10秒鍾”的新進展


什么是“黑色10秒鍾”?

“黑色10秒鍾”是一種故障特征,每次發生時都持續10秒鍾。在這10秒鍾期間,IIS只接收請求,不響應請求,等10秒鍾一過,這些未響應的請求會一起響應。如果你在“黑色10秒鍾”的第1秒訪問網站,要等10秒鍾之后才能看到頁面。

詳見雲計算之路-阿里雲上:超級奇怪的“黑色10秒鍾”

“黑色10秒鍾”發生的場景

問題發生於安裝了Windows Server 2008 R2的阿里雲雲服務器上(宿主機是Linux/Xen),在Linux雲服務器上不會出現(因為阿里雲在Linux虛機的內核中禁用了CONFIG_PARAVIRT_SPINLOCKS)。

引發“黑色10秒鍾”的原因

由於Linux內核Xen部分對SpinLock處理的bug(Linux 3.2.0-39.62已修復該bug,詳見Linux內核bug引起的“黑色10秒鍾”),只要在虛擬機中用到了SpinLock(http://en.wikipedia.org/wiki/Spinlock),並最終使用了xen的pv spinlock(pv=paravirtualization, http://en.wikipedia.org/wiki/Paravirtualization),進行了hypercall調用,就有引發“黑色10秒鍾”的可能。

而在IIS 7.5的WAS(Windows Process Activation Service)中的確用到了SpinLock,可以從WAS進程的堆棧信息中知曉(見下圖)。

“黑色10秒鍾”的解決思路

1. 從虛擬機層面

對於Linux虛擬機,可以通過修改Linux內核(禁用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進行測試,驚喜地發現:

不見SpinLock的身影!在Windows Server 2012的IIS8中,WAS沒有使用SpinLock。也就是說在Windows Server 2012中不會出現“黑色10秒鍾”。

我們對“黑色10秒鍾”問題的看法

“黑色10秒鍾”問題不僅僅是阿里雲的問題,不僅僅是Linux/Xen的問題,也不僅僅是Windows的問題,它是虛擬化技術發展中要解決的一個問題。虛擬化技術是雲計算發展的基石,所以我們覺得花時間學習它、研究它、思考它、分享它是有價值的。而且開發人員也越來越離不開它,因為未來的大多數程序都是運行在虛擬機中的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM