解决cpu io waitTime100%

本文介绍了如何通过iotop命令定位导致ECS内存报警的原因,发现kswapd0进程占用过高,进一步解释了kswapd0的作用及如何合理配置以避免频繁触发。

今天收到了阿里云的ECS短信报警,内存占用率到90%,因为已经报警好几天,已经要迁移ECS机器,所以就没有在意。直到看到ZABBIX的监控的报警,显示cpu io waitTime 异常,看来问题需要解决才行。
这里写图片描述

这里写图片描述

使用iotop命令查看那个进程是引起cpu io waitTime的罪魁祸首,发现kswapd0 占用了99.99%

kswapd0 是个什么东西?

Linux uses kswapd for virtual memory management such that pages that have been recently accessed are kept in memory and less active pages are paged out to disk.

(what is a page?)…Linux uses manages memory in units called pages.

So,the kswapd process regularly decreases the ages of unreferenced pages…and at the end they are paged out(moved out) to disk

译文

它是虚拟内存管理中,负责换页的,操作系统每过一定时间就会唤醒kswapd ,看看内存是否紧张,
如果不紧张,则睡眠,在 kswapd 中,有2 个阀值,pages_hige 和 pages_low,
当空闲内存页的数量低于 pages_low 的时候,kswapd进程就会扫描内存并且每次释放出32free 
pages,直到 free page 的数量到达pages_high。

需要给服务器留有一定空间的物理内存,太满不进会唤起kswapd ,对其他程序也会因为没有扩展物理内存,没法应对突发情况。

<think>我们正在处理用户关于高iowait的问题。根据用户描述,iowait持续高于85%,需要排查和解决。 参考引用[1]中的场景:当iowait高时,说明CPU在等待I/O操作,这通常是由于磁盘I/O瓶颈导致的。 我们的目标:定位高I/O的源头,并给出优化方案。 排查步骤: 1. 确认iowait状态:使用top, vmstat, iostat等工具确认iowait值。 2. 定位高I/O进程:使用iotop, pidstat等工具。 3. 分析具体I/O操作:使用blktrace, iostat -x等深入分析磁盘I/O。 4. 检查文件系统和磁盘状态:使用dmesg, smartctl等。 5. 优化建议。 注意:用户要求系统性能优化,所以我们需要详细说明每一步的命令和解读。 我们将按照以下结构回答: 一、确认iowait状态 二、定位高I/O进程 三、分析磁盘I/O性能 四、检查硬件和文件系统 五、优化建议 六、临时缓解措施 七、相关问题 注意:在回答中,我们会引用一些工具的输出示例,并解释关键指标。</think>### Linux系统iowait持续高于85%的排查与解决方案 iowait高表示CPU在等待I/O操作(磁盘/网络)完成的时间过长,本质是**存储设备或文件系统成为瓶颈**。以下是系统化排查流程: --- #### 一、确认I/O瓶颈根源 ```bash # 1. 实时监控iowait和磁盘状态 (每秒刷新) $ watch -n1 "iostat -xmdz 1 2 | awk 'NR>3 && /sd/ || /Device/'" ``` **关键指标解读**: - `%util > 90%` → 磁盘饱和 - `await > 20ms` → I/O延迟高 - `r/s + w/s > 磁盘队列深度` → 请求积压 - `avgqu-sz > 1` → 请求排队 ```bash # 2. 定位高I/O进程 $ iotop -oPa --only # 显示活跃I/O进程 $ pidstat -d -p ALL 1 # 每秒进程I/O统计 ``` **输出关键列**: - `kB_rd/s`:读取速度 - `kB_wr/s`:写入速度 - `kB_ccwr/s`:因写冲突被取消的I/O --- #### 二、分析I/O操作类型 ```bash # 1. 查看文件级I/O $ sudo strace -fp <PID> -e trace=file 2>&1 | grep -v ENOENT # 跟踪文件访问路径 # 2. 检查块设备级I/O $ sudo blktrace -d /dev/sda -o - | blkparse -i - # 实时I/O请求解析 ``` **常见瓶颈模式**: | 现象 | 可能原因 | |---------------------|------------------------------| | 小文件随机写风暴 | 数据库日志/邮件服务 | | 大文件顺序读持续高 | 备份任务/视频流 | | 元数据操作占比高 | 小文件海量操作(如Git) | --- #### 三、检查存储层状态 ```bash # 1. 磁盘健康检测 $ smartctl -A /dev/sda | grep -E 'Reallocated|Pending|Uncorrectable' # 出现非零值表示磁盘损坏 # 2. 文件系统诊断 $ sudo dmesg | grep -i 'error\|I/O\|retry' # 内核I/O错误 $ mount | grep noatime # 检查是否禁用访问时间记录 ``` --- #### 四、针对性优化方案 **根据瓶颈类型处理**: 1. **硬件层优化** - RAID调优:`echo 4096 > /sys/block/md0/md/stripe_cache_size` - SSD开启TRIM:`fstrim -v /` - 升级NVMe磁盘(随机I/O性能提升10倍+) 2. **文件系统优化** ```bash # Ext4优化 (示例) $ tune2fs -o journal_data_writeback /dev/sda1 $ mount -o remount,noatime,nodiratime,data=writeback / ``` - XFS更适合大文件:`mkfs.xfs -f -l size=64m,version=2 /dev/sdb1` 3. **应用层调优** ```bash # 限制进程I/O优先级 $ ionice -c2 -n7 -p <PID> # IDLE级调度 # 调整内核I/O调度器 $ echo kyber > /sys/block/sda/queue/scheduler # NVMe推荐 $ echo bfq > /sys/block/sdb/queue/scheduler # SATA推荐 ``` 4. **内核参数紧急调整** ```bash # 增大脏页回写阈值 (危险! 仅临时使用) $ sysctl vm.dirty_ratio=30 $ sysctl vm.dirty_background_ratio=10 $ sysctl vm.dirty_expire_centisecs=6000 ``` --- #### 五、深度诊断工具 ```bash # 1. 使用BCC工具集动态跟踪 $ sudo /usr/share/bcc/tools/biolatency # I/O延迟直方图 $ sudo /usr/share/bcc/tools/biosnoop # 实时跟踪每个I/O请求 # 2. 使用perf分析I/O堆栈 $ perf record -e block:block_rq_issue,block:block_rq_complete -ag -- sleep 30 $ perf report ``` --- ### 优化效果验证 ```bash # 优化前后对比测试 $ fio --name=test --ioengine=libaio --rw=randwrite --bs=4k --numjobs=4 --size=1G --runtime=60 --time_based ``` **关键指标提升**: - `iowait%` 降至 5-15% - `await` < 5ms - `%util` < 70% > 注:数据库类应用需结合`innodb_flush_method`等参数调优[^1] --- ### 临时应急措施 ```bash # 1. 释放页面缓存 (可能引起短暂卡顿) $ sync; echo 1 > /proc/sys/vm/drop_caches # 2. 暂停非关键服务 $ systemctl stop backup-service # 3. 限制用户级I/O $ cgcreate -g blkio:/limit_group $ cgset -r blkio.throttle.read_bps_device='8:0 1000000' limit_group ``` 通过以上步骤,可解决85%以上的高iowait问题。持续性问题需结合`ebpf`工具进行内核级分析。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值