Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 伺服器硬碟 I/O 讀寫負載監控與壓力測試完整指南

編輯:Linux 教學

問題徵兆

系統回應緩慢、應用程式無反應、甚至死機。經觀察發現 top 中 wa(I/O wait)長期超過 30%,iostat 顯示 %util 接近 100%,確認為硬碟 I/O 瓶頸。

三大核心監控工具

1. top - 快速判斷 I/O 壓力

top - 16:15:05 up 6 days, 6:25, 2 users, load average: 1.45, 1.77, 2.14
Tasks: 147 total, 1 running, 146 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2% us, 0.2% sy, 0.0% ni, 86.9% id, 12.6% wa, 0.0% hi, 0.0% si
Mem: 4037872k total, 4003648k used, 34224k free, 5512k buffers
Swap: 7164948k total, 629192k used, 6535756k free, 3511184k cached

關鍵指標: wa = 12.6%(I/O 等待佔 CPU 時間比)。經驗值: wa > 30% 表示 I/O 壓力嚴重。

2. iostat -x - 深度分析裝置層面

# 若無指令,先安裝:yum install -y sysstat
iostat -x 1 10

輸出關鍵欄位解讀:

欄位含義警戒閾值
%util裝置頻寬使用率> 80% 持續即為瓶頸
await平均 I/O 等待時間(ms)> 20ms 需關注
svctm平均服務時間(ms)接近 await 表示隊列擁塞
avgqu-sz平均請求隊列長度> 10 明顯擁塞
r/s, w/s每秒讀/寫請求數結合 rkB/s, wkB/s 判斷負載型態

範例輸出:

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 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
sdb 0.00 1122 17.00 9.00 192.00 9216.00 96.00 4608.00 123.79 137.23 1033.43 13.17 100.10
sdc 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

結論: sdb %util 100.10%、await 1033ms、avgqu-sz 137,明顯寫入瓶頸(wrqm/s 1122 大量合併寫入)。

3. vmstat - 關聯進程阻塞狀態

vmstat 1

關注 b 欄(等待資源的進程數)。若 b 持續 > 0 且 wa 高,確認有進程因 I/O 阻塞。

I/O 壓力測試基準

建立 2GB 測試檔,觀察系統極限:

time dd if=/dev/zero bs=1M count=2048 of=direct_2G oflag=direct
  • oflag=direct 繞過頁面快取,直寫磁碟,測試真實裝置效能
  • 同步執行 iostat -x 1 觀察 %util、await 變化

進階定位高 I/O 進程

# 1. pidstat 顯示每進程 I/O 統計(需 sysstat 9.0+)
pidstat -d 1

# 2. iotop 即時顯示進程讀寫頻寬(需安裝)
iotop -o

# 3. /proc 手動分析
while true; do
    for pid in $(ps -eo pid); do
        if [[ -f /proc/$pid/io ]]; then
            rbytes=$(awk '/read_bytes/ {print $2}' /proc/$pid/io)
            wbytes=$(awk '/write_bytes/ {print $2}' /proc/$pid/io)
            [[ $rbytes -gt 1000000 || $wbytes -gt 1000000 ]] && echo "PID $pid: R=$rbytes W=$wbytes"
        fi
    done
    sleep 2
done

常見優化方向

  1. 應用層: 資料庫啟用緩衝池、非同步寫入、分庫分表;日誌採用批次寫入
  2. 檔案系統: noatime 掛載選項、deadline/noop I/O 排程器(SSD 建議 noop)
  3. 硬體層: RAID 卡啟用 Write Back + BBU、上 NVMe SSD、調整 RAID Stripe Size
  4. 核心參數: vm.dirty_ratio、vm.dirty_background_ratio、vm.dirty_expire_centisecs 調整髒頁回寫積極度
Copyright © Windows教程網 All Rights Reserved