當前位置:
首頁 > 科技 > 禍害阿里雲宕機 3 小時的 IO HANG 究竟是個什麼鬼!

禍害阿里雲宕機 3 小時的 IO HANG 究竟是個什麼鬼!

作者 | 王知無

責編| 郭 芮

2019年3月3日凌晨,微博炸鍋,有網友反映說阿里雲疑似出現宕機,華北很多互聯網公司受到暴擊傷害,APP、網站全部癱瘓,我自己的朋友圈和微信群里也有好友反饋,剛剛從被窩被叫起來去修Bug,結果發現伺服器登不上去了......

凌晨2點37分,阿里雲官方回應稱:華北2地域可用區C部分ECS伺服器等實例出現IO HANG,經緊急排查處理後逐步恢復,此外將根據協議儘快賠償。並已經全面排查其他地域及可用區,未發現此類情況。

IO HANG

那麼問題來了,IO HANG是個什麼鬼?簡單的說,就是伺服器磁碟讀寫過慢,導致線程和進程掛起。大量讀寫線程/進程掛起導致伺服器宕機......

阿里雲有大量的類似RDS、HybridDB資料庫,支持海量數據在線事務(OLTP)和在線分析(OLAP),需要大量的IO讀寫,而Linux的IO性能將直接影響SQL的執行速度,嚴重情況下將導致伺服器卡死和宕機。

如何監控自己伺服器的IO情況呢?本文將帶大家詳細了解這些常用的命令。

如何監控自己伺服器的IO情況?

常用的命令包括:top,iostat和iotop。那麼他們都有什麼區別,以及如何使用呢?我們一一分解。

我本機安裝的是CentOS-7的虛擬機,內核信息為:

top命令

top命令提供了實時的對系統處理器的狀態監視。它將顯示系統中CPU最"敏感"的任務列表,該命令可以按CPU使用、內存使用和執行時間對任務進行排序,而且該命令的很多特性都可以通過互動式命令。

在Linux下,輸入`top` :

Tasks、Cpus、Mem和Swap分別代表了進程信息、CPU信息和內存信息。 各個列表示的指標意義如下 :

top常用的互動式命令使用格式:

top [-] [d] [p] [q] [c] [C] [S] [s] [n]

參數說明:

d:指定每兩次屏幕信息刷新之間的時間間隔,當然用戶可以使用s交互命令來改變之;

p:通過指定監控進程ID來僅僅監控某個進程的狀態;

q:該選項將使top沒有任何延遲的進行刷新。如果調用程序有超級用戶許可權,那麼top將以儘可能高的優先順序運行;

S:指定累計模式;

s:使top命令在安全模式中運行,這將去除交互命令所帶來的潛在危險;

i:使top不顯示任何閑置或者僵死進程;

c:顯示整個命令行而不只是顯示命令名。

通過top命令,我們即可查到當前伺服器的進程佔用CPU和內存情況。

iostat命令

iostat主要用於監控系統設備的IO負載情況,iostat首次運行時顯示自系統啟動開始的各項統計信息,之後運行iostat將顯示自上次運行該命令以後的統計信息。用戶可以通過指定統計的次數和時間來獲得所需的統計信息。

基本使用:

$iostat -d -k 2

參數說明:

-d:顯示設備(磁碟)使用狀態;

-k:某些使用block為單位的列強制使用Kilobytes為單位;

2:數據顯示每隔2秒刷新一次。

如果提示沒有iostat命令需要使用yum安裝,安裝命令如下:

`yum install sysstat`

參數解釋如下:

tps:該設備每秒的傳輸次數,一次傳輸意思是「一次I/O請求」,多個邏輯請求可能會被合併為「一次I/O請求」;

kB_read/s:每秒從設備(drive expressed)讀取的數據量;kB_wrtn/s:每秒向設備(drive expressed)寫入的數據量;

kB_read:讀取的總數據量;

kB_wrtn:寫入的總數量數據量,這些單位都為Kilobytes。

上面的例子中,我們可以看到磁碟sda以及它的各個分區的統計數據,當時瞬時統計的磁碟總TPS是1.88,下面是各個分區的TPS(因為是瞬間值,所以總TPS並不嚴格等於各個分區TPS的總和)。

在實際業務中,我們經常使用的命令是:

iostat -xdm

例如:iostat -xdm 2,2代表2秒鐘刷新一次。

我們可以看到,%util這個參數即代表磁碟繁忙程度。100%表示磁碟繁忙, 0%表示磁碟空閑。但是我們需要注意,磁碟繁忙程度並不意味著磁碟讀寫速度大小。

iostat是系統級別的監控指令,iostat給我們的展示結果揭示了我們當前伺服器磁碟的繁忙程度,雖然有一定的指導意義,但是不能精確到進程級別,這時候我們就需要iotop了。

iotop命令

我們上文講到top命令,顧名思義,iotop代表io版本的top命令,使用起來簡單粗暴,直接在命令行敲下:iotop。

iotop命令可以按進程統計IO狀況,我們可以指導當前系統哪些進程在佔用IO,百分比是多少,佔用IO的進程是在讀,還是在寫,讀寫量是多少等信息。然後我們可以定位到具體的進程,查看進程詳情。

同樣個iotop命令有一個很像的命令叫做pidstat,參數很多。

例如:`pidstat -d` :

我們同樣可以看到每個進程的讀寫情況,然後定位到具體的線程去查看問題。

總結

在生產實踐中,實時監控我們的伺服器IO情況至關重要,尤其是資料庫所在的伺服器,它直接關係到我們的程序的讀寫速度、SQL的執行情況等。

伺服器IO的情況是我們選擇伺服器的重要考慮因素之一。IO變差,輕則寫入服務讀寫響應緩慢,重則導致大量進程長時間掛起,資料庫擁堵卡死,伺服器嚴重卡頓,甚至宕機。

作者:王知無,阿里巴巴高級大數據開發工程師,先後在京東,阿里等大型互聯網公司從事大數據平台、實時計算和離線計算中間件和業務平台開發。自媒體人,業餘講師,希望為更多的互聯網開發人員提供最新和最熱的大數據方向的技術動態,技術前沿研究。

聲明:本文為作者投稿,版權歸其個人所有。

熱 文推 薦


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

HTTP3 為什麼比 HTTP2 靠譜?
未來五年,iOS 開發如何前行?

TAG:CSDN |