【问题标题】:How to limit the number of instances UpStart can simultaneously start or respawn如何限制 UpStart 可以同时启动或重生的实例数量
【发布时间】:2015-05-13 20:36:04
【问题描述】:

我有一个 UpStart 服务作业,其中有许多 (~100) 个实例需要启动。它们中的每一个都是资源密集型进程,在启动期间会执行大量磁盘读取/写入。当它们全部同时启动或重生时,它们会由于过多的磁盘读/写请求而引起麻烦。

我需要一种方法来限制 UpStart 尝试同时启动或重生的实例数量。例如,有没有办法让 UpStart 推迟启动另一个实例,直到另一个实例的启动或重生开始后 30 秒?

【问题讨论】:

  • 如果你的工作是一个 shell 脚本,你可以插入一个随机的暂停,这样当 10 个同时开始时,它们每个暂停不同的秒数并间隔自己 - 或者你可以在进行密集启动时让所有作业锁定某个文件。但这是一个与暴发户无关的shell脚本解决方案。
  • 你能展示一个暴发户脚本吗?他们都一样吗?
  • 我觉得@Paul 提到的lock 方法很酷。但这需要更改应用程序代码本身(顺便说一句,它不是 shell 脚本。它是一个完整编译的应用程序)。令人惊讶的是,UpStart 没有一些内置功能来自动保存和排队服务实例 (?)。

标签: linux ubuntu upstart


【解决方案1】:

您可以使用顺序启动它们

start on started otherUpstartService

【讨论】:

  • UpStart 何时将服务视为“启动”?进程一启动?如果它太早,它可能无助于及时分散负载。如果为时已晚,可能会耽误太多时间。
【解决方案2】:

您可以使用pre-startpost-stop 在每个作业后暂停。例如post-stop exec sleep 5

【讨论】:

  • 如果它们在启动时都休眠相同的时间,那么问题仍然存在。有没有办法让睡眠时间随机?
  • 您可以执行post-stop exec sleep $(( ( RANDOM % 10 ) + 1 )) 之类的操作来获得 1 到 10 秒之间的睡眠。只需将 10 更改为任何其他整数即可获得更大的范围
猜你喜欢
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 2014-10-01
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多