限制一个程序创建的磁盘 I/O?

Pos*_*iet 4 linux lvm kvm-virtualization

硬件:一台虚拟化服务器。双 Nehalem,24GB RAM,2 TB 镜像高清。

软件:Debian、KVM、服务器上的 virt-manager 以及多个使用 Linux 的虚拟机。2 TB 磁盘是一个大 LVM,每个 VM 都有一个逻辑卷并在其中创建自己的分区。

问题:在其中一台 VM 上运行的程序之一会产生巨大的磁盘负载。这从来都不是问题,因为该程序从未在如此强大的硬件上运行过。现在 CPU 速度很快,结果就是大量的 I/O。我们目前对此无能为力,因为该工具是一个黑匣子。另一方面,欢迎快速计算。该程序创建了大约 5 GB 的临时文件,这些文件在下一次迭代期间会被覆盖。

问题:我们如何限制进程的磁盘 I/O?

Kyl*_*ndt 7

你想要ionice命令。对于空闲优先级(最低优先级):

ionice -c3 bash

您也可以使用常规nice命令来降低 CPU 优先级,这也可能会限制 IO 作为副作用。

您也许还可以使用 限制程序上的 FD 数量ulimit。这可能会限制应用程序能够打开的最大文件数,但也可能会破坏它。

另一种选择可能是购买更多内存并将这些临时文件映射到带有 mount 的 ram 磁盘,从而完全减轻磁盘的负载。当然,您也可以通过为临时文件添加另一个磁盘来做同样的事情。