首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >限制使用Jenkins和docker插件的cpu

限制使用Jenkins和docker插件的cpu
EN

Stack Overflow用户
提问于 2019-10-01 22:50:57
回答 1查看 2.3K关注 0票数 3

我有一个使用Docker容器作为构建奴隶的Jenkins设置。

容器是通过Docker插件提供的代理,而不是实例化容器的Jenkinsfile。

机器是一个具有16 i7内存和16 i7交换文件的8线程i7。目前我只运行一个容器。

如果容器中的构建使用所有8个线程,则在构建过程中似乎会导致OS OOM杀死某些GCC进程。有一个混合的构建任务,有些我可以显式地控制线程的数量,另一些则会查询系统的内核数量和宽度。当最大数量的线程处于活动状态时,它似乎耗尽了RAM而没有节流或延迟工作--它似乎也没有充分利用交换空间。

我想限制Docker从服务器允许使用的CPU内核的数量,但是我无法找到将--CPU=2参数传递给Docker run命令的方法。股票论似乎没有我想要的效果。

我很高兴从容器配置中显式地分配资源,以使服务器更加可靠,但我不希望它陷入硬限制,并使OOM失效。

EN

回答 1

Stack Overflow用户

发布于 2019-12-06 15:30:22

我不太清楚您是如何启动Docker容器的,但是如果您在插件的帮助下启动这个容器,我猜您在Jenkinsfile中打了一个电话,比如myImage.inside(“.”)。在这种情况下,您应该能够添加"--cpus=2“作为字符串参数的一部分。至少对我们来说是这样。

然而,该解决方案的缺点是,所有Jenkins作业都必须更新,而且您永远无法确保Jenkins作业的所有创建者都记住这一点。因此,我们实现了一个不同的解决方案,如果上面的解决方案不适用的话,这个解决方案应该适用于您。我们基本上创建了一个脚本,当任何人调用docker时,脚本作为包装器工作。如果调用"docker run“,它会注入”--cpu=2“。否则,它只会将呼叫转发给Docker。我们通过以下方式实现了这一点:

  1. 将以下脚本放入/home/jenkins/bin/docker中。("docker“是文件,而不是文件夹)

代码语言:javascript
运行
复制
    #!/bin/bash

    echo COMMAND: $0 with arguments: $@ >&2

    if [ "$1" = 'run' ] ; then
            echo 'INFO: I found a "run" command, limiting to 2 cpus' >&2

            echo RUNNING: /usr/bin/docker "$1" --cpus=2 "${@:2}" >&2
            /usr/bin/docker "$1" --cpus=2 "${@:2}"
    else
            echo RUNNING: /usr/bin/docker "$@" >&2
            /usr/bin/docker "$@"
    fi

  1. 使其可执行

代码语言:javascript
运行
复制
    chmod a+x /home/jenkins/bin/docker

  1. 通过更新~/..bashrc修改路径。(~/..bash_profile只在登录时生效,这意味着Jenkins将不会获取它。)把"/home/jenkins/bin“放在前面,例如

代码语言:javascript
运行
复制
    PATH=/home/jenkins/bin:$PATH
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58193256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档