确定哪台服务器是高资源消耗任务的最佳选择

确定哪台服务器是高资源消耗任务的最佳选择

我每隔一段时间就会运行一项消耗时间和资源的任务 ( make),该任务可以在任何一台服务器池上运行。

问题是,我不是唯一运行的用户make,当两个或更多不知情的用户make同时运行时,它需要很长时间,有时服务器甚至崩溃。因此我们决定,每当有人想要运行时make,他或她必须首先ssh进入其中一台服务器,确保make其他用户(使用Linux)尚未在该服务器上运行w,然后他或她才能启动make

在我尝试自动化选择服务器的过程中,我编写了一个简单的脚本,该脚本在服务器池上循环,ssh进入每个服务器,并选择其中w没有输出的第一个服务器make,但这种方法是太天真了,因为它忽略了以下几点:

  • 每台服务器都有不同的属性(例如,一台有 12 个 CPU,另一台有 80 个 CPU)
  • make不是这些服务器运行的唯一任务
  • w仅显示已登录的用户进程ssh,虽然大部分时间make都在运行ssh,但很可能有人正在make从服务器本身运行。

我想更改选择服务器的标准,但不确定它应该是什么。
我在网上查找并找到了该top命令,但同样,我不确定应该考虑什么。
例如,我考虑使用以下标准:$(top -bn 1 | grep 'Cpu\(s\)' | gawk '{print $2+$3+$4+$6+$7+$8}')确定当前最不繁忙的服务器,但这忽略了服务器的属性。可能有一台更繁忙的服务器,拥有更多的 CPU。

答案1

您应该寻找分布式任务/作业调度程序、集群管理系统或云管理。其中很多已经存在; cas 在他的评论中指出了一些,谷歌还会发现更多。

我相信一旦部署了一个,你们都会更开心,而不必再担心一直踩到对方的脚趾。另外,您应该修复服务器,这样错误只会导致任务失败,而不是导致机器瘫痪。

如果您坚持构建自己的资源(我承认我已经做过这件事 - 尽管那是 15 年前的事),那么从广义上讲,任务会消耗几种不同类型的资源,您可能需要考虑您的任务占用哪些资源:

  • 内存(RAM)[从你的运行速度非常慢或崩溃,我猜这对你的make任务来说是一个很大的任务]
  • 磁盘I/O带宽
  • 每秒磁盘 I/O 操作数(查找)
  • 磁盘空间
  • 中央处理器时间
  • GPU时间
  • 网络带宽

您可以通过 来检查内存使用情况free,通过 来检查磁盘 I/O iostat,通过 来检查空间,通过(在 Linux 上)或, ,等free检查 CPU 使用情况。cat /proc/loadavguptimetopps

但是,当然,检查当前数字有一个问题 - 也许您的make工作首先需要花费几分钟时间执行一些简单的操作,然后启动需要数十亿 RAM 的庞大进程。这可能会发生:

  1. Alice 运行脚本来启动“make”任务。
  2. 脚本检查 serverA,发现它有大量可用 RAM,CPU 使用率低,在 serverA 上启动任务。
  3. 不久之后,Bob 运行脚本来启动其他一些 RAM 密集型任务。
  4. Alice的任务还没有进入资源密集阶段。因此,当脚本检查 serverA 时,它仍然有大量可用 RAM。也在 serverA 上启动 Bob 的任务。
  5. Bob 的任务耗尽了 serverA 上的大部分可用 RAM
  6. Alice 的任务终于进入了 RAM 密集型部分,但现在没有可用的 RAM。呃-哦! ServerA 被打死。

是的,上面的内容来自于编写一个的经验(尽管对于我使用我的来说,这是 CPU 时间)。

相关内容