memory - Docker容器的CPU和内存利用率

标签 memory docker jenkins cpu

我的Jenkins作业中有一个运行此命令的Docker容器:

docker run --name="mydoc" reportgeneration:1.0 start=$START end=$END config=$myfile

这很好。该镜像是从DockerFile创建的,该文件正在使用ENTRYPOINT执行shell脚本。

现在,我想知道此容器已使用了多少CPU和内存。我正在使用Jenkins作业,在“执行shell命令”中,我正在运行上述Docker run命令。

我看到了有关“docker stats”命令的信息。它在我的Ubuntu机器上运行得很好。但是我希望它通过Jenkins运行,因为我的容器是通过Jenkins控制台运行的。因此,这里遵循我的限制。
  • 我不知道是否有任何方法可以停止docker stats命令。在Ubuntu命令行中,我们按“ctrl + c”将其停止。我将如何在 Jenkins 做到这一点?
  • 即使我想出一种停止docker stats的方法,一旦执行了“docker run”命令,该容器也不会处于 Activity 状态并退出。对于退出的容器,CPU和内存利用率将为零。

  • docker run 'image' 
    
    docker stats container id/name
    

    在上面两行中,docker stats命令将仅获得一个退出的容器,我认为docker stats甚至无法与Jenkins控制台一起使用,因为它无法停止。

    有什么办法可以通过Jenkins控制台更好地获取容器的资源利用率(CPU,内存)?

    最佳答案

    建议不要以交互方式运行docker stats,而要使用带有如下循环的shell脚本:

    #!/bin/sh
    
    # First, start the container
    CONTAINER_ID=$(docker run -d ...)
    
    # Then start watching that it's running (with inspect)
    while [ "$(docker inspect -f {{.State.Running}} $CONTAINER_ID 2>/dev/null)" = "true" ]; do
        # And while it's running, check stats
        docker stats --no-stream $CONTAINER_ID
        sleep 1
    done
    
    # When the script reaches this point, the container had stopped.
    # For example, let's clean it up (assuming you haven't used --rm in run).
    docker rm $CONTAINER_ID
    

    是否使用checks whenever the container is running条件,并且docker stats --no-stream一次输出统计信息,然后退出,使其适合非交互式使用。

    我相信您可以使用此类shell脚本文件的变体as a build step(显然,已更新为执行有用的操作,而不仅仅是启动容器并查看其统计信息)。

    但是,如果您需要/想要/想要停止一个交互式过程,则kill是您要查找的命令。在终端just sends a SIGINT中按Ctrl-C进入该进程。

    当然,您需要知道PID。我不确定Jenkins,但是如果您刚从带有child-process &(例如docker stats &)的shell脚本启动了子进程,则其PID将为in the $! variable。或者,您可以尝试使用pidofps命令来计算它,但是在并发作业的情况下这可能很容易出错(除非它们都是孤立的)。

    在这里,我假设您的Jenkins工作是执行实际工作的Shell脚本。如果您的设置不同(例如,如果您使用某些插件,因此Jenkins直接与Docker对话),则情况可能会有所不同并且更加复杂。

    关于memory - Docker容器的CPU和内存利用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43659527/

    相关文章:

    jenkins - 使用作业 DSL 禁用多分支管道作业的并发构建

    c++ - 内存中是否有地址为 NULL(0) 的物理部分?

    pointers - unique_ptr 的意义何在?

    docker - Jenkinsfile与docker容器内的writeFile?

    docker - Nexus 3 使用预定义配置创建 docker

    Java 'Email Sending Code' > 已知异常(索引 : 14, 大小 : 14)?

    jenkins - 从阶段内部定义全局环境变量

    mysql - 有关如何优化此 SQL 查询的想法

    memory - Javac -Xmx 限制虚拟机使用

    docker - 带有 docker 代理的 Jenkinsfile 无法加载 ssh key