全部產品
Search
文件中心

:如何查看Linux系統I/O負載情況?

更新時間:Aug 06, 2024

本文介紹如何使用iostat、iotop工具查看I/O負載情況。

查看磁碟I/O負載

使用iostat從系統緯度查看磁碟IO負載

iostat是一款Linux系統中監控I/O效能的工具,可以從系統緯度查看磁碟I/O負載情況。

  1. 執行如下命令,安裝iostat。

    yum install sysstat
  2. 執行如下命令,查看I/O負載。

    iostat -d -k 3 5
    說明
    • -d:顯示磁碟的使用方式。

    • -k:以KB為單位顯示。

    • 3:統計時間間隔。

    • 5:統計次數。

    顯示結果如下。

    IO負載

    顯示結果參數說明如下,更多參數說明,請參見iostat(1) - Linux man page

    • Device磁碟名稱。

    • tps:每秒鐘發送到的I/O請求數。

    • Blk_read/s:每秒讀取的block數。

    • Blk_wrtn/s:每秒寫入的block數。

    • Blk_read:讀入的block總數。

    • Blk_wrtn:寫入的block總數。

使用iotop從進程緯度查看磁碟IO負載

iotop是一個用來監視磁碟I/O使用狀況的top類工具,可以從進程緯度查看磁碟IO負載。

  1. 執行如下命令,安裝iotop。

    yum install iotop
  2. 執行如下命令,查看I/O負載。

    iotop -k -n 5 -d 3
    說明
    • -b:記錄到日誌。

    • -k:以KB為單位顯示。

    • -n:統計次數。

    • -d:統計時間間隔。

    顯示結果如下。

    顯示結果參數說明如下,更多參數說明,可執行iotop -h查詢。

    • DISK READ:該進程讀I/O頻寬。

    • DISK WRITE:該進程寫I/O頻寬。

    • SWAPIN:磁碟的交換使用率。

    • IO:該進程的 I/O 利用率,包含磁碟和交換。

kjournald進程佔用I/O資源高問題

問題描述

使用iotop排查分析,發現kjournald進程佔用了大量I/O資源。

問題原因

該問題通常是由於.ext3檔案系統設定的Journal size太小導致。

kjournald進程是ext3檔案系統進行I/O資料操作的核心進程,它在向磁碟內寫入和讀取資料時佔用CPU和記憶體資源。當迴圈的向ext3檔案系統寫資料時,會使Journal size不斷增大,到達設定的Journal size時,就會出現該問題。

解決方案

  1. 遠端連線Linux系統的ECS執行個體。

    具體操作,請參見串連方式概述

  2. 執行如下命令,查看相應分區的Journal size大小。

    dumpe2fs /dev/xvda1 | grep Journal
    說明

    /dev/xvda1請替換為實際的分區。

    系統顯示類似如下,表示/dev/xvda1分區的Journal size為128M。

    dumpe2fs 1.42.9 (28-Dec-2013)
    Journal inode: 8
    Journal backup: inode blocks
    Journal features: journal_incompat_revoke
    Journal size: 128M
    Journal length: 32768
    Journal sequence: 0x00010ffb
    Journal start: 10953
  3. 執行如下命令,修改Journal size大小。

    mke2fs -J size=400 /dev/xvda1 
    說明

    請根據業務需要,修改size大小,/dev/xvda1請替換為實際的分區。

I/O效能最佳化:通過4K對齊提高I/O效能

4K對齊指將符合4K扇區定義格式化過的硬碟,按照4K扇區的規則寫入資料。4K對齊可以使簇與扇區相對應,保證了磁碟讀寫效率,以提高I/O效能。

本操作介紹如何通過以下指令碼對磁碟進行格式化並自動設定4K對齊。

警告

運行此指令碼會自動格式化所有資料盤,如果非新購資料盤,請在操作前,確認已對相關資料盤進行資料備份。具體操作,請參見建立快照

  1. 使用root使用者遠端連線Linux系統的ECS執行個體。

    具體操作,請參見串連方式概述

  2. 下載auto_fdisk.zip壓縮包後解壓,將解壓後指令碼並上傳到目標伺服器。

  3. 依次執行如下命令,為指令碼添加執行許可權,然後運行指令碼。

    chmod +x ./auto_fdisk.sh
    ./auto_fdisk.sh