如何在Linux系统中触发高iowait以测试Nagios监控脚本
如何在Linux系统中触发高iowait以测试Nagios监控脚本
嘿,刚好我之前也折腾过类似的测试,给你几个简单有效的方法来触发高iowait,完美适配你的Nagios脚本测试需求:
方法一:用dd直接压测磁盘(快速入门)
这是最容易上手的方式,通过绕开系统缓存直接写入磁盘,产生真实的IO负载:
# 注意:如果/tmp是tmpfs(内存文件系统),请替换成实际挂载的磁盘分区,比如/var或专门的测试分区 dd if=/dev/zero of=/tmp/iowait_test bs=1G count=10 oflag=direct
oflag=direct是关键:它会绕过页缓存,让数据直接写入物理磁盘,强制系统等待IO完成,瞬间拉高iowait- 可以调整
bs(块大小)和count(块数量)来控制负载强度,比如bs=500M count=20和上面的总数据量一样,但IO模式略有不同
方法二:并发IO负载(测试高阈值场景)
如果想模拟更接近真实业务的并发IO压力,用循环启动多个dd进程就行:
# 同时启动10个写入进程,调整{1..10}的数字可以增减并发数 for i in {1..10}; do dd if=/dev/zero of=/mnt/testfile$i bs=100M count=5 oflag=direct & done
- 记得把
/mnt换成你的实际磁盘分区 - 测试完成后别忘了清理临时文件:
rm /mnt/testfile*
方法三:用fio做精准可控的IO压测(专业级)
如果需要更精准控制IO类型(随机读写、并发数、持续时间),fio是专业工具:
- 先安装fio:
# Debian/Ubuntu系 sudo apt update && sudo apt install fio # RHEL/CentOS系 sudo yum install fio - 运行压测命令:
这个命令会:fio --name=iowait_test --ioengine=libaio --rw=randwrite --bs=4k --numjobs=16 --size=1G --iodepth=32 --direct=1 --runtime=60 --time_based- 以16个并发进程执行4K随机写
- 绕过缓存直接操作磁盘(
direct=1) - 持续压测60秒(
runtime=60),时间到后自动停止
小提醒
- 测试前务必确认目标磁盘有足够的剩余空间,避免把磁盘写满
- 生产环境绝对不要在业务机器上做测试!找专门的测试服务器或者虚拟机
- 可以用
iostat 1命令实时查看iowait的变化,确认负载是否达到你的预期
备注:内容来源于stack exchange,提问作者Prince Linuxer
相关产品推荐
相关产品推荐

