【问题标题】:How do I get memory usage of processes running in a Docker container?如何获取在 Docker 容器中运行的进程的内存使用情况?
【发布时间】:2017-09-21 03:08:55
【问题描述】:

我创建了 85 个容器,所有容器都在我的 Linux 机器上运行相同的 .NET 核心应用程序映像。 我对所有容器的 REST 调用都是一样的,但是每个容器使用的内存是不同的。

这是我不明白的。为什么内存使用不同,因为所有容器都运行同一个镜像,而 REST 调用也一样?

我可以通过以下方式获取容器使用的内存:

  1. docker stats

    CONTAINER- 7827fe8127eb
    
    CPU - 0.00%
    
    MEM USAGE / LIMIT - 67.1MiB / 7.666GiB
    
    MEM % - 0.85%
    
    NET I/O - 76.4kB / 6.19kB
    
    BLOCK I/O - 42.7MB / 0B
    

    从上面的统计数据我知道,我的容器使用的内存是 67.1 MB。

  2. 然后我进入容器内部,试图找出正在运行的进程以及这些进程使用的内存。

    docker exec -i -t 7827fe8127eb /bin/bash
    top
    

    现在从“docker stats”得到的统计数据说容器内存是67MB,那么dotnet进程使用的内存是多少呢?

    "RES" 列值是否提供进程内存? 因为RESsize 是 92.70 MB,大于容器内存。

  3. 我使用 Docker 引擎 API 来获取容器统计信息。但我不知道究竟是哪个属性指定了容器内存。

    "memory_stats": {
        "usage": 72302592,
        "max_usage": 84365312,
        "stats": {
            "active_anon": 47865856,
            "active_file": 6664192,
            "cache": 24477696,
            "dirty": 4096,
            "hierarchical_memory_limit": 9223372036854772000,
            "inactive_anon": 8450048,
            "inactive_file": 9318400,
            "mapped_file": 16236544,
            "pgfault": 118960,
            "pgmajfault": 104,
            "pgpgin": 120339,
            "pgpgout": 105242,
            "rss": 47824896,
            "rss_huge": 8388608,
            "total_active_anon": 47865856,
            "total_active_file": 6664192,
            "total_cache": 24477696,
            "total_dirty": 4096,
            "total_inactive_anon": 8450048,
            "total_inactive_file": 9318400,
            "total_mapped_file": 16236544,
            "total_pgfault": 118960,
            "total_pgmajfault": 104,
            "total_pgpgin": 120339,
            "total_pgpgout": 105242,
            "total_rss": 47824896,
            "total_rss_huge": 8388608,
            "total_unevictable": 4096,
            "total_writeback": 0,
            "unevictable": 4096,
            "writeback": 0
        },
        "limit": 8231383040
    },
    

我找不到,这里也是 67.1 MB。

首先,为什么每个容器使用的内存不同,因为它们运行的​​是相同的镜像,执行的 REST 操作也相同?

发现某些容器最多使用 93 MB,那么哪个容器进程实际上占用了最大内存?

【问题讨论】:

    标签: linux docker asp.net-core dockerfile docker-machine


    【解决方案1】:

    如果每个 docker 都像往常一样挂载了/proc/(参见proc(5)...),您可以使用它(例如运行pmap(1) 等...)

    【讨论】:

      猜你喜欢
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多