ubuntu

Ubuntu日志中的磁盘I/O问题怎么办

小樊
47
2025-10-03 03:53:19
栏目: 智能运维

Ubuntu日志中的磁盘I/O问题解决指南

一、优先定位问题根源

  1. 确认磁盘I/O异常
    使用iostat -x 1(需安装sysstat包)监控磁盘利用率(%util)、读写速率(rkB/s/wkB/s)及I/O等待时间(await),若%util接近100%或await过高,则表明存在I/O瓶颈。也可通过vmstat 1查看bi(块输入)、bo(块输出)列,数值持续高位则需进一步排查。
  2. 找出高I/O进程
    iotop -o -P(需root权限)实时查看各进程的磁盘读写速率,重点关注DISK READ/WRITE列数值高的进程(如privileged cont)。结合lsof -p <PID>检查进程打开的文件,若涉及/var/log下的日志文件(如syslogkern.log),则可能是日志记录过多导致。
  3. 分析系统日志
    通过dmesg | grep -i "error\|fail\|i/o"journalctl -xe | grep -i "disk\|i/o"查看是否有磁盘错误(如I/O errorBuffer I/O error)、文件系统错误(如EXT4-fs error)或硬件掉线记录,这些日志能直接指向问题源头(如硬盘故障、驱动问题)。

二、针对性解决日志相关的I/O问题

  1. 清理旧日志释放空间
    使用journalctl --vacuum-size=500M将日志文件压缩至500MB以内,或journalctl --vacuum-time=2weeks删除两周前的日志,避免日志文件无限增长占用大量磁盘I/O。也可手动删除/var/log下旧日志(如syslog.1kern.log.1),但需注意保留近期关键日志。
  2. 调整日志级别减少记录量
    编辑/etc/rsyslog.conf/etc/rsyslog.d/50-default.conf,将不必要的日志级别从info调整为warningerror(如将*.*;auth,authpriv.none -/var/log/syslog改为*.warning;auth,authpriv.none -/var/log/syslog),减少不必要的日志输出。修改后重启rsyslog服务:sudo systemctl restart rsyslog
  3. 禁用不必要的服务日志
    对于产生大量日志但不需要的服务(如avahi-daemon),编辑其配置文件(如/etc/avahi/avahi-daemon.conf),将log-level=info改为log-level=warning,然后重启服务:sudo systemctl restart avahi-daemon,降低其对磁盘I/O的占用。

三、系统级I/O性能优化

  1. 优化I/O调度器
    根据硬盘类型选择合适的调度器:
    • HDD(机械硬盘):使用deadline调度器(减少寻道延迟),执行echo deadline | sudo tee /sys/block/sda/queue/schedulersda为实际硬盘设备名);
    • SSD(固态硬盘):使用noopnone调度器(无需内核调度,发挥SSD并行优势),执行echo noop | sudo tee /sys/block/sda/queue/scheduler。修改后需重启系统或重新加载内核模块使设置生效。
  2. 调整内核I/O参数
    修改/etc/sysctl.conf,添加以下参数优化脏页写入(减少频繁磁盘写入):
    vm.dirty_ratio = 10      # 当脏页占内存10%时触发写入
    vm.dirty_background_ratio = 5  # 后台进程开始写入的阈值
    vm.swappiness = 10       # 减少内存交换到磁盘的频率(0-100,值越小越倾向于使用内存)
    
    执行sudo sysctl -p使参数生效。
  3. 使用高性能存储设备
    若条件允许,将传统HDD更换为SSD(如NVMe SSD),其更高的读写速度和更低的延迟能显著提升磁盘I/O性能。安装后需启用TRIM支持(sudo fstrim -v /),延长SSD寿命。

四、硬件与深层排查

  1. 检查硬盘健康状态
    使用smartctl -a /dev/sda(需安装smartmontools包)查看硬盘SMART信息,重点关注Reallocated_Sector_Ct(重映射扇区数)、Current_Pending_Sector(待修复扇区数)、Offline_Uncorrectable(不可修复扇区数),若这些值大于0,说明硬盘存在坏道,需备份数据并更换硬盘。
  2. 检测内存资源
    使用free -m查看内存可用率,若可用内存低于15%,系统会频繁使用Swap分区(硬盘上的虚拟内存),导致磁盘I/O飙升。此时需增加物理内存或优化内存占用进程(如关闭不必要的程序)。
  3. 排查恶意软件
    使用clamav扫描系统,排除勒索软件或挖矿程序伪装成系统进程占用磁盘I/O的可能:
    sudo apt install clamav
    sudo freshclam  # 更新病毒库
    sudo clamscan -r / --exclude-dir="^/sys|^/proc"  # 全盘扫描(跳过系统目录)
    
    若发现恶意文件,需立即隔离并删除。

0
看了该问题的人还看了