在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

應用卡死可能是因為你的磁盤IO出了問題

阿銘linux ? 來源:阿銘linux ? 作者:阿銘linux ? 2022-12-13 09:33 ? 次閱讀

計算機有三大件:CPU、內存、磁盤,這三者有一個“拖后腿”的,那就是磁盤。在生產環境,作為數據庫角色的服務器磁盤建議拿至少4塊硬盤做RAID10,這樣既保證數據讀寫速度也保證數據的安全。如果使用普通的磁盤,即使CPU再強悍,最終的服務器性能也不會太好。



在我的職業生涯中,遇到過多次因為磁盤I/O效率低而導致MySQL查詢非常慢的問題。對于一般的小網站來說,MySQL的查詢隊列(用show processlist查看)不會超過100個,甚至不會超過10個,這是因為MySQL查詢速度非常快。如果查詢隊列數量突然變大,可能是因為網站訪問量變大也可能是因為磁盤讀寫速度變慢。

本案例背景是這樣的,一臺阿里云的機器,收到告警磁盤IO達到100%,但是登錄機器后查看并沒有什么異常,也就是說磁盤飆到100%只是短暫的一會兒。既然出現了100%的情況,那說明肯定是有某個進程有問題。由于這個問題并不是一直出現,所以排查起來有點困難。于是,想到寫一個監測腳本,來實時查看磁盤IO使用情況,當發現異常時,則通過一些查看服務器狀態的指令來記錄具體的指標,從而分析出是什么造成的磁盤IO使用率100%。



知識點一:使用iostat查看磁盤IO



如果你系統中沒有iostat命令,需要安裝sysstat包,CentOS安裝方法是:

# yum install -y sysstat

iostat命令如果不加任何選項,執行結果如下:

# iostat
Linux 3.10.0-862.el7.x86_64 (web30)     2022年11月06日     _x86_64_    (4 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                 1.50      0.00     2.10         0.07      26.12     70.21
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               15.95         1.95       108.97         545936   30453675

avg-cpu: 為總體cpu使用情況統計信息,對于多核cpu,這里為所有cpu的平均值

Device: 為各磁盤設備的IO統計信息

對于cpu統計信息一行,我們主要看iowait的值,它指示cpu用于等待io請求完成的時間。Device中各列含義如下:

Device: 為設備名稱

tps: 為每秒進程下發的IO讀、寫請求數量

Blk_read/s: 為每秒讀扇區數量(一扇區為512bytes)

Blk_wrtn/s: 為每秒寫扇區數量

Blk_read: 為取樣時間間隔內讀扇區總數量

Blk_wrtn: 為取樣時間間隔內寫扇區總數量

我們經常會在iostat后面加上兩個數字,例如:

# iostat   1 3
Linux 3.10.0-862.el7.x86_64 (web30)     2022年11月06日     _x86_64_    (4 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.50    0.00    2.10    0.07   26.12   70.22
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda              15.96         1.96       109.10     546984   30511811
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.79    0.00    1.58    0.53   26.58   70.53
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda             376.00         0.00      2324.00          0       2324
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.78    0.00    1.04    0.00    9.14   89.03
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               0.00         0.00         0.00          0          0

第一個1表示每隔1秒打印一次,3表示一共打印3次。iostat命令還有一個非常使用的選項-x,它可以顯示更多的信息,也是我最常用的一個選項,如下:

# iostat  -d -x 1 2
Linux 3.10.0-862.el7.x86_64 (web30)     2022年11月06日     _x86_64_    (4 CPU)
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.06    0.04   15.91     1.95   109.11    13.92     0.34   21.07    4.49   21.12   1.10   1.75
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

說明:-d選項可以把cpu相關信息過濾掉,只顯示磁盤相關信息,以下為各列的含義:

rrqm/s: 每秒對該設備的讀請求被合并次數,文件系統會對讀取同塊(block)的請求進行合并

wrqm/s: 每秒對該設備的寫請求被合并次數

r/s: 每秒完成的讀次數

w/s: 每秒完成的寫次數

rkB/s: 每秒讀數據量(kB為單位)

wkB/s: 每秒寫數據量(kB為單位)

avgrq-sz:平均每次IO操作的數據量(扇區數為單位)

avgqu-sz: 平均等待處理的IO請求隊列長度

await: 平均每次IO請求等待時間(包括等待時間和處理時間,毫秒為單位)

svctm: 平均每次IO請求的處理時間(毫秒為單位)

%util: 采用周期內用于IO操作的時間比率,即IO隊列非空的時間比率

對于這些列,我們最應該關注的是最后一列%util,本案例中提到磁盤使用率100%,其實就是%util的值為100%。

知識點二:iotop查看哪個進程磁盤讀寫最高

iotop命令是一個用來監視磁盤I/O使用狀況的top類工具。iotop具有與top相似的UI,其中包括PID、用戶、I/O、進程等相關信息。iotop命令就是由iotop包安裝得來的,在CentOS下安裝iotop的方法是:

# yum install -y iotop

安裝完成后直接輸入iotop回車,結果顯示跟top類似,它是動態實時查看各個進程的磁盤讀寫情況,效果如下:

# iotop
Total DISK READ :    0.00 B/s | Total DISK WRITE :      60.42 K/s
Actual DISK READ:    0.00 B/s | Actual DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                                                                       
1419 be/4 nginx       0.00 B/s    3.55 K/s  0.00 %  0.00 % nginx: worker process
9634 be/4 www         0.00 B/s   49.76 K/s  0.00 %  0.00 % php-fpm: pool www
9646 be/4 www         0.00 B/s    7.11 K/s  0.00 %  0.00 % php-fpm: pool www
  512 be/4 polkitd     0.00 B/s    0.00 B/s  0.00 %  0.00 % polkitd --no-debug
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd --switched-root --system --deserialize 22
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_bh]
    9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_sched]

對于各列的輸出,很容易理解,我們主要看第4和5兩列。iotop有幾個快捷鍵,如下:

左右箭頭:改變排序方式,默認是按IO排序。

r:改變排序順序。

o:只顯示有IO輸出的進程。

p:進程/線程的顯示方式的切換。

a:顯示累積使用量。

q:退出。

如果在shell腳本中使用iotop命令,需要加上-b選項,即不使用動態顯示的模式,當然還需要加另外幾個選項,具體用法如下:

# iotop -obn2
Total DISK READ :       0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
Total DISK READ :       0.00 B/s | Total DISK WRITE :      59.67 K/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
1416 be/4 nginx       0.00 B/s    3.51 K/s  0.00 %  0.00 % nginx: worker process
1417 be/4 nginx       0.00 B/s    3.51 K/s  0.00 %  0.00 % nginx: worker process
1418 be/4 nginx       0.00 B/s    3.51 K/s  0.00 %  0.00 % nginx: worker process
1419 be/4 nginx       0.00 B/s    3.51 K/s  0.00 %  0.00 % nginx: worker process
9638 be/4 www         0.00 B/s    3.51 K/s  0.00 %  0.00 % php-fpm: pool www

說明:-o跟上面那個快捷鍵o一個意思,它的作用是只顯示有IO的進程。-n2表示需要統計2次,因為第一次不會顯示任何進程。

本案例參考腳本

#!/bin/bash
##監控磁盤IO使用率,并找出哪個進程造成磁盤使用率很高
##該腳本需要寫一個常駐循環
##作者:阿銘
##日期:2022-11-06


#判斷機器上是否安裝iostat命令
if ! which iostat &>/dev/null
then
    yum install -y sysstat
    #如果你的機器為ubuntu,請使用這個命令:apt-get install -y sysstat
fi


#判斷機器上是否安裝iotop命令
if ! which iotop &>/dev/null
then
    yum install -y iotop
    #如果你的機器為ubuntu,請使用這個命令:apt-get install -y iotop
fi
#定義記錄日志的目錄
logdir=/tmp/iolog
[ -d $logdir ] || mkdir $logdir
#定義日志名字
dt=`date+%F`


#定義獲取io的函數(取5次平均值)
get_io()
{    
    iostat -dx 1 5 > $logdir/iostat.log
    sum=0
    #取最后一列的%util值循環遍歷然后相加
    for ut in  `grep "^$1" $logdir/iostat.log|awk '{print $NF}'|cut -d. -f1`
    do
        sum=$[$sum+$ut]
    done
    echo $[$sum/5]
}


#這里的true表示條件為真
while true
do
    #獲取所有設備,對所有設備名遍歷
    for d in `iostat -dx|egrep -v '^$|Device:|CPU)'|awk '{print $1}'`
    do
        io=`get_io $d`
        #如果io使用率大于等于80
        if [ $io -ge 80 ]
        then
            #向日志里記錄時間、iostat和iotop信息
            date >> $logdir/$dt   
            cat $logdir/iostat.log >>$logdir/$dt
            iotop -obn2 >>$logdir/$dt
            echo "####################" >>$logdir/$dt
        fi
    #休眠10秒,繼續以上步驟
    done
    sleep 10
done

當然,這個腳本還并不完美,因為一旦發生磁盤IO使用率很高的情況,則會持續一段時間,這樣就會頻繁地記錄日志。其實,根據以前案例二中我們學過的告警收斂的思路,可以把該腳本適當修改。希望你可以動手來寫一寫,這樣才能鍛煉你的邏輯思維能力。另外,你也可以把該腳本改為發告警郵件的形式。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • IO
    IO
    +關注

    關注

    0

    文章

    448

    瀏覽量

    39203
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10878

    瀏覽量

    212166
  • 計算機
    +關注

    關注

    19

    文章

    7518

    瀏覽量

    88192
  • 磁盤
    +關注

    關注

    1

    文章

    379

    瀏覽量

    25224

原文標題:應用卡死可能是因為你的磁盤IO出了問題

文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    晶振不起振也可能是PCB設計的鍋

    PCB設計在電子產品中的重要性不言而喻,也因此,產品一旦出現了問題,就需要考慮是否是因為PCB設計不良的問題。比如,產品調試時晶振不起振,這可能是因為晶振器件本身的問題,也有可能是因為PCB設計上
    的頭像 發表于 12-29 15:46 ?1908次閱讀

    使用tc397進行收發的時候沒有響應是因為什么?

    在使用 tc397 進行收發的時候,發現沒有響應,代碼是根據示例代碼修改,通過邏輯分析儀和示波器進行調試的 只修改了對應的 tx,rx 引腳,請問可能是因為什么原因
    發表于 03-05 07:45

    飛凌嵌入式ElfBoard ELF 1板卡-通用文件IO模型之write

    文件的字節數,該返回值可能小于count參數值。這被稱為“部分寫”。對磁盤文件來說,造成“部分寫”的原因可能是由于磁盤已滿,或是因為進程資源
    發表于 10-12 09:24

    AD仿真,這個錯誤是因為什么?

    這個錯誤是因為什么?
    發表于 11-03 21:53

    DM368卡死現象是否是因為上電順序引起的?

    張sd卡在開發板上就能正常引導內核進入文件系統。請問,這種卡死現象是否是因為上電順序引起的,上電順序不按照文檔來的話還會有什么其他潛在問題,謝謝!
    發表于 08-27 14:18

    庫UFX打開文件出錯0x1F,請問可能是哪里的問題?

    查詢磁片容量大小不對 實際是32G,結果是64G打開文件的時候,提示 0x1F/* USB存儲器操作失敗,在初始化時可能是USB存儲器不支持,在讀寫操作中可能是磁盤損壞或者已經斷開 */這個文件是存在的 請問
    發表于 05-16 07:31

    在imxrt1176上的TICK設置為1000Hz后RTT會卡死可能是什么原因?

    *)CORE1_BOOT_ADDRESS, (uint32_t)rpmsg_lite_base, kMCMGR_Start_Synchronous);請問大神們,可能是什么原因?
    發表于 01-09 15:51

    三星折疊手機Galaxy Fold造成屏幕損壞的原因是因為鉸鏈結構和灰塵

    Galaxy Fold采用了內折的方案,屏幕配合中間的鉸鏈開合,實現折疊的效果。據iFixit表示,他們在拆開Galaxy Fold發現,造成屏幕損壞的原因可能是因為下方的7mm缺口。這個缺口在使用中可能會導致灰塵、外部雜質等進入OLED面板內部,然后在折疊過程中損壞屏幕
    發表于 04-27 10:00 ?4970次閱讀

    警惕!的電腦變卡可能是因為在幫別人挖礦

    知道嗎?挖礦病毒不僅吞噬電力,更能拖慢的計算能力。許多“中招”的數據中心,以及無法精確統計的僵尸網絡,正在貪婪的吞噬電力、拖慢企業的計算能力。對于個人用戶而言,“礦工”可能就躲藏在你我的電腦當中。
    的頭像 發表于 08-19 10:47 ?8144次閱讀

    PCB銅線脫落可能是因為什么原因

    PCB的銅線脫落(也是常說的甩銅)不良,PCB廠都說是層壓板的問題,要求其生產工廠承擔不良損失。
    的頭像 發表于 04-09 17:00 ?3509次閱讀

    PBGA失效可能是因為什么原因

    BGA在電子產品中已有廣泛的應用,但在實際生產應用中,以PBGA(PLASTIC BALL GRID ARRAY)塑料封裝BGA居多。
    的頭像 發表于 12-15 11:35 ?2548次閱讀

    linux虛擬機下使用IOMETER測試磁盤IO性能

    前面有分享了windows下如何使用IOMETER來測試網絡磁盤IO性能,今天分享一下linux下如何使用IOMETER來測試網絡磁盤的性能。在linux下和window下工作模式有些區別:在
    發表于 07-08 10:32 ?14次下載
    linux虛擬機下使用IOMETER測試<b class='flag-5'>磁盤</b>的<b class='flag-5'>IO</b>性能

    可能是因為蘇伊士運河被堵這個?

    今年3月24號,由日本制造、船員來自印度、運營公司來自中國臺灣、掛的是巴拿馬的旗、最后被荷蘭人和埃及人幫忙拖走的長賜號巨型集裝箱船在蘇伊士運河擱淺。 蘇伊士運河連接著紅海和地中海,全球12%的貿易要通過這個運河,因此它常被稱為“歐亞大動脈”。但是,長賜號把這個重要的國際運輸要道的血管給堵上了,超過200艘輪船卡在了河道里,在整整6天6夜后才再次通行。 蘇伊士運河管理局(Suez Canal Authority)的局長 Osama Rabie 稱,擱淺期間,光是
    的頭像 發表于 04-13 10:00 ?2323次閱讀
    <b class='flag-5'>可能是因為</b>蘇伊士運河被堵這個?

    解決蘋果手機卡死的方法,讓從此不再頭疼

    相信很多蘋果手機用戶都會遇到手機卡死的問題,這讓人十分頭疼,本次哇哦找到了一個解決蘋果手機卡死的方法,讓從此不再為這個問題頭疼。 蘋果手機卡在蘋果logo上的原因: 這是蘋果手機用戶經常遇到的一個
    發表于 03-14 15:23 ?5727次閱讀
    解決蘋果手機<b class='flag-5'>卡死</b>的方法,讓<b class='flag-5'>你</b>從此不再頭疼

    Linux磁盤IO詳細解析

      在講解磁盤IO前,先簡單說下什么是磁盤磁盤是可以持久化存儲的設備,根據存儲介質的不同,常見磁盤可以分為兩類:機械
    的頭像 發表于 08-05 15:49 ?651次閱讀
    Linux<b class='flag-5'>磁盤</b><b class='flag-5'>IO</b>詳細解析
    主站蜘蛛池模板: 精品三级国产精品经典三| 美女网站黄页| 在线毛片网| 久久永久免费| 欧美激情亚洲精品日韩1区2区| 欧美性一区二区三区五区| 久久性久久性久久久爽| 国产三及| www男人的天堂| 天天综合天天色| 国产农村一级特黄α真人毛片 | 国产成人mv 在线播放| 1024手机在线看片| 视频一区亚洲| 亚洲六月婷婷| 欧美日韩国产一区二区三区不卡| 久久精品男人影院| 亚洲日本中文字幕天天更新| 欧美女同网站| 国产黄色视屏| 日本人的xxxxxxxxx69| 日本与大黑人xxxx| 精品热99| 深爱五月婷婷| 激情综合网婷婷| 精品免费| 最新免费jlzzjlzz在线播放| 日日添天天做天天爱| 深爱五月激情| 福利片午夜| 99热网站| 日本写真高清视频免费网站网| 精品爱爱| 色图插插插| 91中文字幕在线视频| 亚洲午夜久久久精品影院视色 | 亚洲一区二区高清| 午夜三级国产精品理论三级| 免费观看黄色在线视频| 在线播放免费视频| v视界影院最新地址|