如何在不严重影响其他进程的情况下执行 CPU/磁盘密集型操作?

Par*_*emp 5 server performance 12.04 nice

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

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

这是我确定可以工作的命令:

nice -n 19 ionice -c 3 git clone bukkit backup
Run Code Online (Sandbox Code Playgroud)

从我读过的内容来看,这应该给进程最低的 CPU 优先级和“仅空闲”磁盘优先级。但是,它仍然具有锁定和超时每个连接到 Minecraft 服务器的相同效果。需要明确的是,git 存储库不在活动服务器文件夹中,因此不存在任何类型的文件访问冲突。

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

Lit*_*lue 2

主要是我们不尝试并行运行进程,但是我们看到在哪个时间系统的使用量尽可能小
所以首先你必须找到没有(或者可能只有少数)的时间在您的服务器上,例如星期一 2 点。

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

$ at 0200 monday
     /home/your_home/name_of_the_script.sh
<Ctrl-D>
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请阅读man at和,请务必使用+man atd退出输入CtrlD

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


jmi*_*rez 0

如果您在 Amazon EC2 实例上运行,并且只能在短时间内(突发)使用 100% CPU 并强制执行平均利用率(例如,虚拟 CPU 的 20%),那么您还应该限制您的 CPU 总使用量。处理与cpulimit. 否则,您将用完所有 CPU 积分,并且您的实例将受到限制。可以在此处找到教程。

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

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