如何执行 CPU/磁盘密集型操作而不显著影响其他进程?

如何执行 CPU/磁盘密集型操作而不显著影响其他进程?

我在 Ubuntu 12.04 上运行服务器。我尝试执行的操作是git clone,作为我正在实施的新备份系统的一部分。源和目标都是本地的,因此克隆不涉及任何网络活动。

该服务器托管 Minecraft,我希望能够在服务器运行时在后台执行此类操作。但是,每次我尝试这样做时,它都会锁定服务器并踢出所有人,尽管我尽了最大努力限制对资源使用的影响。

这是我确信可以起作用的命令:

nice -n 19 ionice -c 3 git clone bukkit backup

据我所知,这应该会为该进程提供最低的 CPU 优先级和“仅空闲”磁盘优先级。但是,它仍然具有锁定和超时所有连接到 Minecraft 服务器的用户的相同效果。需要明确的是,git 存储库不在活动服务器文件夹中,因此不存在任何类型的文件访问冲突。

如果需要的话我可以提供有关硬件规格的详细信息。谢谢。

答案1

我们主要不会尝试并行运行这些进程,但我们会发现系统的使用率在哪个时间尽可能小,
因此首先您必须找出服务器上没有(或者可能只有少数)用户的时间,例如星期一下午 2 点。

要将来运行该命令一次,可以使用 atd(at-daemon):

$ at 0200 monday
     /home/your_home/name_of_the_script.sh
<Ctrl-D>

有关详细信息,请阅读man atman atd务必使用Ctrl+退出输入D

  • 确保您的脚本有效+可执行!

答案2

如果你在 Amazon EC2 实例上运行,并且只能在短时间内(突发)使用 100% 的 CPU,并且强制平均使用率(例如虚拟 CPU 的 20%),你还应该使用以下命令限制进程的总 CPU 使用率:cpulimit。否则,您将用尽所有 CPU 积分,并且您的实例将受到限制。可以找到教程这里

编辑:似乎没有涉及网络。如果有的话,您还可以尝试每个进程的流量整形器:

可以找到一些好的建议这里,最简单的方法似乎是:

相关内容