日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux io阻塞问题

發布時間:2025/3/15 linux 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux io阻塞问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在linux 上 磁盤讀寫過高 的 I/O 問題 導致 cpu wait 問題,這里是用一些方法找出問題。

首先 使用 top 命令找出 出現 cpu 中 是否進程運行等待問題

# top

[cpp]?view plaincopy
  • top?-?03:57:39?up?1?day,?15:40,??0?users,??load?average:?0.00,?0.00,?0.00??
  • Tasks:???8?total,???1?running,???7?sleeping,???0?stopped,???0?zombie??
  • %Cpu(s):??0.0?us,??0.0?sy,??0.0?ni,100.0?id,??95.1?wa,??0.0?hi,??0.0?si,??0.0?st??
  • KiB?Mem?:??1019664?total,???174644?free,????78960?used,???766060?buff/cache??
  • KiB?Swap:??1165316?total,??1154816?free,????10500?used.???272848?avail?Mem???

  • ?在%Cpu(s) 一行中 95.1 wa (例子數據)

    表示cpu 中出現嚴重等待問題,可能導致的原因就包括 讀寫磁盤 I/O 造成的


    查找是否是 (確定 上面假設)I/O阻塞問題

    方法有二

    方法一

    [cpp]?view plaincopy
  • $?iostat?-x?2?5??
  • avg-cpu:?%user?%nice?%system?%iowait?%steal?%idle??
  • ?3.66?0.00?47.64?48.69?0.00?0.00??
  • ??
  • Device:?rrqm/s??wrqm/s??r/s?????w/s????rkB/s?????wkB/s?????avgrq-sz??avgqu-sz??await???r_await??w_await??svctm???%util??
  • sda?????44.50???39.27???117.28??29.32??11220.94??13126.70??332.17????65.77?????462.79??9.80?????2274.71??7.60????111.41??
  • dm-0?0.00?0.00?83.25?9.95?10515.18?4295.29?317.84?57.01?648.54?16.73?5935.79?11.48?107.02??
  • dm-1?0.00?0.00?57.07?40.84?228.27?163.35?8.00?93.84?979.61?13.94?2329.08?10.93?107.02??

  • 上面的指標 有有三個需要明白

    %util 111.41??利用率,說明了磁盤 的 讀寫io 過高了,出現了延遲狀況

    await 響應時間 ?svctm 表示平均每次設備I/O操作的服務時間 ?await 和?svctm 越接近表示幾乎沒有I/O等待,上面差距大

    r/s 117.28? 讀出請求數 ?w/s 29.32? 寫入請求數 ?說明讀出次數過高

    其它參數

    [cpp]?view plaincopy
  • rrqm/s:每秒這個設備相關的讀取請求有多少被Merge了(當系統調用需要讀取數據的時候,VFS將請求發到各個FS,如果FS發現不同的讀取請求讀取的是相同Block的數據,FS會將這個請求合并Merge);wrqm/s:每秒這個設備相關的寫入請求有多少被Merge了。??
  • ??
  • rsec/s:每秒讀取的扇區數;??
  • wsec/:每秒寫入的扇區數。??
  • rKB/s:The?number?of?read?requests?that?were?issued?to?the?device?per?second;??
  • wKB/s:The?number?of?write?requests?that?were?issued?to?the?device?per?second;??
  • avgrq-sz?平均請求扇區的大小??
  • avgqu-sz?是平均請求隊列的長度。毫無疑問,隊列長度越短越好。??????
  • await:??每一個IO請求的處理的平均時間(單位是微秒毫秒)。這里可以理解為IO的響應時間,一般地系統IO響應時間應該低于5ms,如果大于10ms就比較大了。??
  • ?????????這個時間包括了隊列時間和服務時間,也就是說,一般情況下,await大于svctm,它們的差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統出了問題。??
  • svctm????表示平均每次設備I/O操作的服務時間(以毫秒為單位)。如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高于svctm的值,則表示I/O隊列等待太長,?????????系統上運行的應用程序將變慢。??
  • %util:?在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閑置,那么該設備的%util?=?0.8/1?=?80%,所以該參數暗示了設備的繁忙程度??
  • 。一般地,如果該參數是100%表示設備已經接近滿負荷運行了(當然如果是多磁盤,即使%util是100%,因為磁盤的并發能力,所以磁盤使用未必就到了瓶頸)。??
  • 參考?http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858810.html


    方法二

    [cpp]?view plaincopy
  • root@50e261fb9e06:/var#?dstat?-d??
  • -dsk/total-??
  • ?read??writ??
  • 1081B??977B??
  • ???0?????0???
  • ???0?????0???
  • ???0?????0???
  • ???0?????0??
  • 使用 dstat ,其實他就是集成了iostat , vmstat,netstat,ifstat 等工具而已


    現在確定了 是 I/O 問題了,接著找出哪個進程 操作哪些文件而導致上面的原因的

    同樣提供兩種方法

    第一種 根據 linux IO 讀寫 epoll 機制(省略,研究中...)讀寫時會合理運用資源,就是某某進程在讀資源,就會先sleep 一會,把cpu讓給其他進程,那么阻塞的時候就會不間斷的sleep 或 ps 里面 的?狀態或“D”狀態,所以可以用腳本找出如下可疑進程

    [cpp]?view plaincopy
  • #?for?x?in?`seq?1?1?10`;?do?ps?-eo?state,pid,cmd?|?grep?"^D";?echo?"----";?sleep?5;?done??
  • D?248?[jbd2/dm-0-8]??
  • D?16528?bonnie++?-n?0?-u?0?-r?239?-s?478?-f?-b?-d?/tmp??
  • ----??
  • D?22?[kswapd0]??
  • D?16528?bonnie++?-n?0?-u?0?-r?239?-s?478?-f?-b?-d?/tmp??
  • ----??
  • D?22?[kswapd0]??
  • D?16528?bonnie++?-n?0?-u?0?-r?239?-s?478?-f?-b?-d?/tmp??
  • ----??
  • D?22?[kswapd0]??
  • D?16528?bonnie++?-n?0?-u?0?-r?239?-s?478?-f?-b?-d?/tmp??
  • ----??
  • D?16528?bonnie++?-n?0?-u?0?-r?239?-s?478?-f?-b?-d?/tmp??
  • ----??
  • 第二種方法使用 ? iotop 工具,這個可能需要安裝,不是系統自帶的

    [cpp]?view plaincopy
  • Total?DISK?READ?:???????0.00?B/s?|?Total?DISK?WRITE?:???????7.87?K/s??
  • Actual?DISK?READ:???????0.00?B/s?|?Actual?DISK?WRITE:???????7.87?K/s??
  • TID??PRIO??USER?????DISK?READ??DISK?WRITE??SWAPIN?????IO>????COMMAND??
  • 20736?be/4?www-data????0.00?B/s????7.87?K/s??0.00?%??0.08?%?php-fpm:?pool?www??
  • 上面可以看到當前系統讀寫高的進程(已經排序)和 PID

    找到 PID 號號辦事啊

    現在已經發現是哪個進程導致的問題,跟著呢,找出磁盤上哪個文件的讀寫過高問題

    使用 lsof 命令 最簡單用法是

    lsof -p 20736(pid 號)

    [cpp]?view plaincopy
  • root@iZ28ec5minyZ:~#?lsof?-p?20736??
  • COMMAND?????PID?????USER???FD???TYPE?DEVICE?SIZE/OFF????NODE?NAME??
  • php-fpm7.?20736?www-data??cwd????DIR??253,1?????4096???????2?/??
  • php-fpm7.?20736?www-data??rtd????DIR??253,1?????4096???????2?/??
  • php-fpm7.?20736?www-data??txt????REG??253,1??4277456?1196882?/usr/sbin/php-fpm7.0??
  • php-fpm7.?20736?www-data??mem????REG??253,1????43616??798292?/lib/x86_64-linux-gnu/libnss_files-2.19.so??
  • php-fpm7.?20736?www-data??mem????REG??253,1????47760??798284?/lib/x86_64-linux-gnu/libnss_nis-2.19.so??
  • php-fpm7.?20736?www-data??mem????REG??253,1????97296??798280?/lib/x86_64-linux-gnu/libnsl-2.19.so??
  • php-fpm7.?20736?www-data??mem????REG??253,1????39824??798279?/lib/x86_64-linux-gnu/libnss_compat-2.19.so??
  • php-fpm7.?20736?www-data??DEL????REG????0,4????????????21893?/dev/zero??
  • 上面的 iostat 可以看到哪個磁盤,lsof 可以找出進程控制的文件,然后找出大致是那幾份文件出問題了

    ok!

    參考資料?http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/

    總結

    以上是生活随笔為你收集整理的linux io阻塞问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。