VPS 磁盘 IO 读写速度慢通常由服务商限制 IOPS 或硬盘类型导致,建议先用 fio 测试基准性能,再用 iotop 排查占用进程。优化操作前需确认套餐规格,避免误删数据或触发风控。
先说结论:VPS 磁盘性能主要取决于服务商提供的硬件配额,软件优化空间有限,重点在于确认是否触及上限。
- 先定位:使用 fio 区分是带宽不足还是 IOPS 受限
- 先做:通过 iotop 找出高 IO 占用进程并限制
- 再验证:优化后重新运行基准测试对比数据
命令速用版
以下命令用于快速测试磁盘读写速度和查看实时 IO 占用,请在 /tmp 目录下操作以避免填满系统盘。
# 测试写入速度(安全模式,测试后删除文件)
dd if=/dev/zero of=/tmp/io_test bs=1M count=1024 conv=fdatasync
# 查看实时 IO 占用进程
iotop -o
# 查看磁盘 IO 统计信息
iostat -x 1 5为什么会这样
VPS 磁盘 IO 慢的根本原因通常是共享宿主机资源争抢或服务商设置了严格的 IOPS 上限。虚拟化技术(如 KVM、OpenVZ)会隔离物理硬件资源,导致单个 VPS 无法独占磁盘带宽。此外,文件系统碎片、Swap 频繁交换以及后台备份任务也会占用大量 IO 队列,造成读写延迟升高。
分步处理
按照以下顺序排查和优化,每一步操作后需观察系统负载变化。
1. 排查异常进程
运行 iotop -o 查看是否有进程持续占用磁盘。如果发现数据库日志写入频繁或备份脚本正在运行,可调整其执行时间至低峰期。若发现未知进程高占用,需检查是否被植入挖矿程序。
2. 检查 Swap 使用情况
运行 free -h 查看 Swap 使用率。如果 Swap 使用过高,说明物理内存不足导致频繁磁盘交换。可尝试清理缓存或优化应用程序内存配置,但不要盲目关闭 Swap 导致 OOM 崩溃。
3. 调整文件系统挂载参数
编辑 /etc/fstab 文件,为数据盘添加 noatime 参数,减少读取文件时更新访问时间的写操作。修改后运行 mount -o remount /挂载点 生效。此操作风险较低,但需确保 fstab 语法正确以免无法启动。
4. 联系服务商确认配额
如果上述步骤无效,查看服务商控制台是否显示 IO throttling(限流)。部分低价 VPS 会限制每秒读写次数,此时软件优化无效,需升级套餐或更换硬盘类型(如从 HDD 换为 NVMe)。
怎么验证是否生效
优化完成后,再次运行 fio 或 dd 命令对比测试数据。观察 iostat 命令输出中的 await 列,数值降低表示 IO 等待时间减少。同时监控服务器负载 load average,若数值下降且业务响应变快,说明优化有效。
常见坑
使用 dd 测试时未加 conv=fdatasync 会导致结果虚高,因为数据可能仅停留在缓存未写入磁盘。在磁盘空间不足时运行测试可能触发文件系统只读保护。盲目禁用 Swap 可能导致内存溢出时服务直接崩溃而非降级运行。
常见问题
dd 和 fio 测试哪个更准确?
fio 更准确,因为它能模拟随机读写和混合负载,而 dd 仅测试顺序写入速度。
Swap 关闭能提升 IO 速度吗?
不能,关闭 Swap 仅避免磁盘交换,但内存不足时会导致服务崩溃,需根据内存余量决定。
为什么升级 CPU 后 IO 还是慢?
磁盘 IO 与 CPU 性能无关,主要受硬盘类型和服务商 IOPS 限制,需升级存储套餐。
参考来源
- fio 官方文档,Flexible I/O Tester,https://github.com/axboe/fio
- iotop 项目页面,iotop,https://guichaz.free.fr/iotop/
- Linux 系统管理手册,iostat 命令说明,https://man7.org/linux/man-pages/man1/iostat.1.html