【问题标题】:How many Jenkins Executors can you have?你可以拥有多少个 Jenkins Executor?
【发布时间】:2016-10-31 20:08:01
【问题描述】:

我正在使用 Jenkins 运行并行测试。

我设置它的方式是我有一个构建流程作业,它并行执行三个其他作业。其他三个作业连接到单独的测试 XML 文件。

当我最初开始时,我遇到了一个问题,即只有两个作业会同时执行,而第三个作业只有在其他一个作业完成后才会执行。

我发现这是因为我的 Jenkins 将执行者的数量设置为 2,现在设置为 5。

但是,出于兴趣,为了未来的规划,Jenkins 是否对您可以拥有的执行者数量设置了上限?或者有一个你不应该超过的推荐数字?还是完全取决于您运行它的环境?

如果有上限/建议数量不要超过?我认为解决这个问题的最佳方法是使用主/从方案并将工作负载分散到多个虚拟机中。

例如,如果我将其设置为 6 个执行程序,这是否意味着我将在每个 VM 上拥有 6 个执行程序?还是在 VM 之间共享 6 个执行器?

【问题讨论】:

    标签: jenkins executor parallel-builds


    【解决方案1】:

    这实际上取决于您的环境以及分配给该 Jenkins 实例的资源量。我不相信 Jenkins 允许的执行者数量有任何限制。我们目前运行一个带有 20 个执行器的 Jenkins 实例,没有任何问题。当然,根据您的构建管道和提交模式,您可能会发现您设置的执行器数量过多。您只需要注意您是否在任何给定时间实际使用了所有执行程序。

    如果您发现您的 Jenkins 实例的资源已接近上限,并且您无法增加资源限制,那么您将希望开始使用从站。

    我们关注资源使用情况的一种方法是通过Monitoring plugin。

    ***编辑:

    由于我们的管道实际在做什么,我们最近不得不重新评估我们的执行器与处理器的比率。您确实需要确定您的管道/作业的 CPU 约束程度。这将不可避免地因用例而异。

    在我们的案例中,我们的管道非常受 CPU 限制,并且随着我们优化系统、引入并行处理等而变得越来越多。我们最终每个 cpu 核心有一个执行程序,还有一些额外的“管理员”执行程序可以快速运行/ 轻量级任务。

    我们目前在具有 20 个内核的单台机器上运行 jenkins,但同样,这将取决于您的用例。我们必须根据构建频率和目标构建时间进行大量计算来确定我们需要多少个执行器/cpu 内核。当我们最终必须提高处理能力时,我们最终会利用从属设备在多台机器之间分配作业。

    另一个注意事项:您还需要考虑可用内存,因为增加执行程序的数量会增加消耗的内存量。我们有一个案例,我们有足够的处理能力但没有足够的内存,导致 Jenkins 的进程由于 OutOfMemory 错误而崩溃。

    【讨论】:

    • 嗨@TheEllis。感谢您的回答!我会看看那个监控程序,这对于找出我能实现和不能实现的目标很有用。
    • 似乎和往常一样-在# of executors标签帮助-问号下:"..A good value to start with would be the number of CPU cores on the machine."。当然,这取决于 RAM、tmp 空间量等环境。我们有 8 个核心,但主节点只有 5 个执行器。
    • 你的服务器大小是多少?
    • Omer,我在上面的帖子中添加了一个编辑
    【解决方案2】:

    我一直在寻找同样的问题,并在 Jenkins 本身的字段旁边找到了这个:

    编辑:更具体地说,Jenkins 版本 2.73.3,在 UI 中,在您的工作配置中,每个字段的右侧应该有很少的 ?s。如果您单击它们,它们将为您提供有关该字段预期内容的更多详细信息。对于 executors 字段,您应该找到这个。

    Jenkins 可以在此代理上执行的最大并发构建数。 一个好的开始值是机器上的 CPU 内核数。设置更高的值会导致每次构建花费更长的时间,但可能会增加整体吞吐量。例如,一个构建可能受 CPU 限制,而同时运行的第二个构建可能受 I/O 限制——因此第二个构建可以利用当时的空闲 I/O 容量。

    代理必须至少有一名执行人。要暂时阻止在代理上执行任何构建,请使用代理页面上的标记此节点暂时离线按钮。

    这不适用于 Jenkins 主节点 — 将执行者的数量设置为零将阻止任何构建在主节点上执行。

    据我所知,这取决于你的工作具体是做什么的;我们的部署脚本只执行gcloud 命令,因此我们在具有更多执行程序的实例上运行这些命令。然而,我们的 selenium 测试在具有 1 个执行程序/核心的实例上运行。不过,从表面上看,我们还是在安全的一边玩它。

    【讨论】:

    • 很高兴知道您的报价来源以及您的答案中“我们的”是什么意思(使用了两次)。
    • @sebadagostino 好电话:) - 我已经更新了在哪里可以找到东西。至于“我们的”,我的意思是在我工作的公司。
    猜你喜欢
    • 2020-03-06
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多