不幸的是,我们的一台服务器上的 HDD 性能非常差,一旦我们启动更大的复制过程,它就会停止提供任何 Apache 响应,这真的很糟糕。
有没有办法限制复制过程的带宽,以便它不会消耗所有 HDD 性能,同时仍为 Apache 和其他进程留下一些空间来完成它们的工作?
答案1
您可以尝试rsync
设置带宽限制器选项,例如以~5MB/s 的速度复制
rsync -r /path/to/src /path/to/dest --bwlimit=5120 --progress
该--progress
参数是可选的,但将确认复制带宽和进度。-r
用于递归复制目录而不是文件。
答案2
不幸的是,我不能对答案发表评论,所以这里是对 plasmid87 给出的答案的一个小扩展:如果您尝试递归复制文件夹,则应-r
在命令中添加参数。除此之外,它运行完美。
答案3
在我看来,最好的办法是运行cp
进程nice
'd,降低其优先级。它不会限制进程本身的带宽,它所做的是限制复制进程相对于系统上所有其他进程从内核/CPU 获得的关注量。如果 Apache 处于正常优先级,那么它应该能够在复制过程中正常提供服务。
答案4
目前尚不清楚您正在运行的复制过程是否属于一般服务器工作负载的一部分,还是可以在机器负载较少时安排的工作负载。
如果经常进行复制,并且你使用的内核版本 > 2.6.25,你可能会发现伊奥尼采使用。
从手册页中:
此程序设置或获取程序的 io 调度类和优先级。如果没有给出参数或仅给出 -p,ionice 将查询该进程的当前 io 调度类和优先级。
例如,要使用“空闲”调度类复制文件,您可以执行以下操作:
ionice -c 3 cp /tmp/example.gpg /tmp/another_example.gpg
该-c 3
开关相当于选择idle
调度类,手册中对此进行了说明:
A program running with idle io priority will only get disk time when no other
program has asked for disk io for a defined grace period. The impact of idle
io processes on normal system activity should be zero.
在我看来这正是您所寻找的。