當用路過秋天的壓力測試工具重現問題的那一刻,熱淚盈眶!這段時間所承受的一切一湧而出。。。
下面這張圖是首次壓力測試重現問題時的windows效能監視器截圖,我們對這樣的圖太熟悉了,當它一出現,就知道問題重現了。紅色的直線表示的是100%的cpu佔用率,藍色如柵欄的線條是asp.net請求執行時間(request execution time)。這時如果用瀏覽器訪問站點,會奇慢無比。
我們是這樣進行壓力測試的,將一台web伺服器從阿里雲slb(負載均衡)中摘下來,其他執行環境(web程式、memcached、nosql、rds)沒有任何變化,然後用壓力測試直接向這台web服務發出請求。壓力測試工具造成這台雲伺服器的tcpv4->connections established(效能監視器的乙個監測指標)超過2000,問題立即重現。
tcpv4->connections established這個指標在我們之前的博文中從沒提過,而它就是今天取得突破的關鍵所在。簡單來說,它表示的是這台伺服器的當前tcp連線負載。今天下午我們發現,正常期間connections established的數值都在1000以內,而故障期間這個值都會超過1000。在出現故障的時候,只要我們以某種方式將connections established的數值降到1000以下,故障就會消失,比如重啟iis、禁用網絡卡,甚至重啟memached/nosql伺服器(它們與web伺服器之間進行頻繁的tcp連線)也能解決問題。
我們的壓力測試就是針對tcpv4->connections established,只要壓到1000以上,問題就會重現;降到1000以下,問題就會消失。(另一張壓測截圖)
為了進一步驗證是這臺雲伺服器本身的問題,與周邊環境無關。在壓測時這台雲伺服器cpu 100%、訪問奇慢無比期間,我們訪問處於同樣環境的其他雲伺服器,速度飛快。
根據壓測情況,我們的猜測是:在某種特定的條件下,當雲伺服器(xen虛擬機器)的併發tcp連線數超過一定的數值(目前我們的估計是1000~2000),雲伺服器的cpu佔用率會飆公升或大幅波動,某些處理能力會急劇下降,比如asp.net的請求處理時間由「幾十毫秒」狂飈至「幾十秒」。(僅是我們單方面的猜測,並不代表阿里云云伺服器的真實情況)
那我們是如何找到tcpv4->connections established的呢?
這要從今天凌晨4點多路過秋天對我們的站點進行短暫的壓測說起。壓測之後,我們發現不僅4臺8核的web伺服器的cpu沒撐住,竟然連8核的memcached伺服器的cpu也沒撐住。這說明問題與應用程式沒有關係,如果是應用程式的原因,那不應該出現memcached伺服器cpu撐不住的情況。應用程式與memcached軟體(couchbase)都會引起這個問題的可能性估計一萬看才會遇到一次。所以從這個壓測,我們進一步排除asp.net應用程式引起這個問題的可能性。
今天上午故障期間,我們特地禁用memcached/nosql進行觀察,問題仍舊。進一步排除了memcached/nosql引起這個問題的可能性。問題與虛擬機器的cpu占用高有關,這是板上釘釘的事實,但是究竟什麼觸發了cpu占用高比這個事實更重要。cpu不會喝酒喝多了,不會發羊癲瘋。。。肯定是某個因素造成的。
iis併發連線數是乙個嫌疑物件,但很難確定是因為cpu占用高造成iis併發連線數上公升,還是因為iis併發連線數上公升造成cpu占用高。在下午的故障期間,我們發現重啟memcached/nosql竟然也能解決問題,說明問題即使與iis併發連線數有關,但也不是僅與iis併發連線數有關。
後來,我們在網上找到了一些說xen虛擬機器tcp處理能力可能存在問題的線索(這只是啟發我們思考問題的線索,不代表現在的xen虛擬機器還存在這個問題)。於是,我們把虛擬機器的tcp處理能力作為乙個懷疑物件,並在windows效能監視器中找到乙個監測指標——tcpv4->connections established,在下午故障期間特地監測了這個指標,才發現前面所說的connections established在1000以下一切正常,1000以上就出故障。然後在壓力測試中專門針對這項指標進行測試,才重現了問題。
那如何解決這個問題?
從我們自身角度,我們會想辦法儘量減少單台雲伺服器的tcpv4->connections established,究竟什麼辦法是有效的,需要經過明天訪問高峰期的驗證。
熱淚盈眶的不僅僅是因為在煎熬中看到了曙光,更是因為給大家帶來這麼多這麼大的麻煩,總算有了一點交代。
徹底解決這個問題後,我們會以更好的產品、更好的服務去彌補!
雲計算之路 阿里雲上 烏雲飄過
一周的萬里無雲是我們的第乙個目標,這周天氣情況好轉,但昨天 今天下午依然有烏雲飄過。昨天下午16 40 16 48左右,部落格站點的兩台web伺服器突然出現cpu坐過山車的波動情況。今天下午14 26 14 32左右再次出現cpu坐過山車的波動情況,之後又出現了幾次短時間的波動。這兩朵烏雲飄過時,都...
雲計算之路 阿里雲上 愚人節被阿里雲OCS愚
今天是愚人節,而我們卻被阿里雲ocs愚,很多地方的快取一直不過期,造成很多頁面中的資料一直不更新。這篇博文將向您分享我們這兩天遇到的ocs問題。阿里雲ocs open cache service 是阿里雲提供的開放快取服務,簡單來說就是乙個巨大的memcached。我們是從2013年12月12日開始...
雲計算之路 阿里雲上 3月5日下午出現的異常情況
雲計算之路 阿里雲上 的系列部落格主要分享的是我們使用阿里雲的真實情況。自從去年9月1日之後,我們開始穩定地用上了阿里雲,直到今天下午出現了異常情況,繼續向大家匯報一下。部落格主站的web伺服器部署情況是這樣的 1個slb下面掛了2臺8核8g的雲伺服器,1台用的是雲磁碟,1台用的是臨時磁碟 本地磁碟...