我有一台运行 Ubuntu 16.04 服务器的机器。它有一个内置 SATA 硬盘,上面装有操作系统,还有一个附加的 USB 3 硬盘,我用它来存储大型/长期文件。很多时候,这意味着将大型文件或文件夹从内置驱动器复制到 USB 驱动器。但是,每当我这样做时,系统的其余部分都会变得非常慢,甚至几乎完全冻结,直到文件传输完成。
我进行了一些测试,以确保这不是由于程序开销或文件类型造成的。我尝试了大型连续文件和包含许多小文件的大型文件夹,并尝试使用 cp、带管道的 pv、带管道的 tar 和 rsync。在所有情况下,系统的其余部分都会锁定。
我还尝试在运行每个命令时在它们前面加上 ionice -c 3 nice -n 20,为进程提供处理器和 IO 的最低优先级。htop 显示该进程的 nice 值为 19。不知道这是否是实际的最小值或者是否设置不正确,但无论如何,包括 Web 服务在内的大多数其他进程的 nice 值都低于 19。
该盒子正在运行几个动态网页,几个是 php,几个是 python。在文件传输期间,这些网页基本上无法使用。我猜想速度变慢是由于 USB 的开销造成的,因为据我所知,所有 USB 传输都必须经过 CPU。这是否是导致速度变慢的真正原因?更重要的是,我有什么办法可以缓解这种情况吗?
编辑(回答评论):
内部和外部驱动器都使用原生 ext4,因此没有 FUSE。据我所知,除了 Ubuntu 默认执行的操作(这是无头 Ubuntu 服务器)之外,没有任何东西可以索引文件。从 的角度来看,CPU 似乎没有负载,但正常运行时间使用报告从 0.5 左右跳升至 6.0-8.0。使用htop
速率限制似乎有帮助,所以这是一个工具的解决方案。我通常只在复制单个文件时使用。有没有办法限制其他程序的速率?我还希望更改优先级,而不仅仅是限制它。根据系统负载进行优化。pv
-L
pv
这是 Ubuntu 服务器的纯净安装。它确实安装了 xorg,但我认为它甚至没有安装窗口管理器,我只想通过 ssh 进行 X11 转发。
此外,虽然 pv、rsync 等上的速率限制器可以很好地保存系统,但我还想最大化传输速率。除了 nice/ionice(似乎没有太多作用)之外,还有其他方法可以告诉系统尽快进行传输,但如果系统需要,则给予系统上的其他任何内容更高的优先级吗?因此,例如,如果我要传输到 USB 需要一个小时才能完成,然后半小时后有人开始使用其中一个 python 站点,它会在前半小时内尽可能快地传输,但当用户开始向 python 站点发出请求时,系统会开始限制它。(我开始认为这个问题应该发布在 Server Fault 上,对此我深表歉意。)