Ubuntu日志中的磁盤I/O問題解決指南
iostat -x 1
(需安裝sysstat
包)監控磁盤利用率(%util
)、讀寫速率(rkB/s
/wkB/s
)及I/O等待時間(await
),若%util
接近100%或await
過高,則表明存在I/O瓶頸。也可通過vmstat 1
查看bi
(塊輸入)、bo
(塊輸出)列,數值持續高位則需進一步排查。iotop -o -P
(需root權限)實時查看各進程的磁盤讀寫速率,重點關注DISK READ
/WRITE
列數值高的進程(如privileged cont
)。結合lsof -p <PID>
檢查進程打開的文件,若涉及/var/log
下的日志文件(如syslog
、kern.log
),則可能是日志記錄過多導致。dmesg | grep -i "error\|fail\|i/o"
或journalctl -xe | grep -i "disk\|i/o"
查看是否有磁盤錯誤(如I/O error
、Buffer I/O error
)、文件系統錯誤(如EXT4-fs error
)或硬件掉線記錄,這些日志能直接指向問題源頭(如硬盤故障、驅動問題)。journalctl --vacuum-size=500M
將日志文件壓縮至500MB以內,或journalctl --vacuum-time=2weeks
刪除兩周前的日志,避免日志文件無限增長占用大量磁盤I/O。也可手動刪除/var/log
下舊日志(如syslog.1
、kern.log.1
),但需注意保留近期關鍵日志。/etc/rsyslog.conf
或/etc/rsyslog.d/50-default.conf
,將不必要的日志級別從info
調整為warning
或error
(如將*.*;auth,authpriv.none -/var/log/syslog
改為*.warning;auth,authpriv.none -/var/log/syslog
),減少不必要的日志輸出。修改后重啟rsyslog
服務:sudo systemctl restart rsyslog
。avahi-daemon
),編輯其配置文件(如/etc/avahi/avahi-daemon.conf
),將log-level=info
改為log-level=warning
,然后重啟服務:sudo systemctl restart avahi-daemon
,降低其對磁盤I/O的占用。deadline
調度器(減少尋道延遲),執行echo deadline | sudo tee /sys/block/sda/queue/scheduler
(sda
為實際硬盤設備名);noop
或none
調度器(無需內核調度,發揮SSD并行優勢),執行echo noop | sudo tee /sys/block/sda/queue/scheduler
。修改后需重啟系統或重新加載內核模塊使設置生效。/etc/sysctl.conf
,添加以下參數優化臟頁寫入(減少頻繁磁盤寫入):vm.dirty_ratio = 10 # 當臟頁占內存10%時觸發寫入
vm.dirty_background_ratio = 5 # 后臺進程開始寫入的閾值
vm.swappiness = 10 # 減少內存交換到磁盤的頻率(0-100,值越小越傾向于使用內存)
執行sudo sysctl -p
使參數生效。sudo fstrim -v /
),延長SSD壽命。smartctl -a /dev/sda
(需安裝smartmontools
包)查看硬盤SMART信息,重點關注Reallocated_Sector_Ct
(重映射扇區數)、Current_Pending_Sector
(待修復扇區數)、Offline_Uncorrectable
(不可修復扇區數),若這些值大于0,說明硬盤存在壞道,需備份數據并更換硬盤。free -m
查看內存可用率,若可用內存低于15%,系統會頻繁使用Swap分區(硬盤上的虛擬內存),導致磁盤I/O飆升。此時需增加物理內存或優化內存占用進程(如關閉不必要的程序)。clamav
掃描系統,排除勒索軟件或挖礦程序偽裝成系統進程占用磁盤I/O的可能:sudo apt install clamav
sudo freshclam # 更新病毒庫
sudo clamscan -r / --exclude-dir="^/sys|^/proc" # 全盤掃描(跳過系統目錄)
若發現惡意文件,需立即隔離并刪除。