Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;docker run--内存";:内部应用程序如何了解docker内存配置?_Docker - Fatal编程技术网

&引用;docker run--内存";:内部应用程序如何了解docker内存配置?

&引用;docker run--内存";:内部应用程序如何了解docker内存配置?,docker,Docker,我正在特权模式下运行docker。 Docker正在运行基于DPDK的应用程序。 我的服务器总共有128G内存,我将容器内存资源限制为4G。 我可以在docker统计中看到 CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS

我正在特权模式下运行docker。 Docker正在运行基于DPDK的应用程序。 我的服务器总共有128G内存,我将容器内存资源限制为4G。 我可以在docker统计中看到

            CONTAINER ID        NAME                     CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS                       [0/18152]
            4deda4634b22        my_docker                38.12%              1.455GiB / 4GiB       36.37%              1.53kB / 0B         1.94GB / 755MB      69
我在docker中看到了完整的128G内存

我的应用程序,读取主机可用内存,并根据单个应用程序分配 总内存的一部分。 我在docker内部安装了两个应用程序。如果docker内的总可用内存为6G。 每个应用程序都将使用3G内存。 如果docker总内存限制为4G。 每个应用程序都应该使用2G。 此分配方案在docker中不起作用,因为它可以看到所有主机内存。 有什么解决办法吗

root@4deda4634b22:/# free -m
              total        used        free      shared  buff/cache   available
              Mem:         128961       35277       75558        2051       18125       90019
              Swap:        131037           5      131032
root@4deda4634b22:/#

根据到目前为止的讨论总结问题和答案

问题:
我想在docker环境中运行2个非DPDK应用程序,总共保留4GB(4K页面)。在docker bash中,我得到的是整个系统内存,而不是docker保留的内存。docker bash中是否有API或二进制文件可用于获取正确的保留内存?


答:我的建议是查看特定于用户实例的docker统计数据,以获取内存,而不是获取主机总内存。因此,我的建议是尝试从主机使用docker stats,将所需的值设置为docker作为环境变量。另一种方法是利用组来记忆。但是访问docker内部的某些内容是很棘手的,因为您需要docker内部的二进制文件和支持(使其变得复杂)

默认情况下,每个docker容器都可以使用主机提供的所有资源。如果要将容器限制为一定的内存量,则必须使用docker解释的
--memory
选项显式指定

示例(4gb限制):
docker运行--内存4096m您的容器名称

请注意,使用
free-m
可以看到系统的整个内存。但是,您可以从该文件的容器中检查内存限制:
/sys/fs/cgroup/memory/memory.limit(以字节为单位)

快速验证这一点的示例:
docker run--rm--memory 4096m debian cat sys/fs/cgroup/memory/memory.limit_in_bytes

如果您添加这样的内存限制,您必须确保您的应用程序将遵守该限制。如果它试图使用超过该限制的内存,它将被杀死

还要注意,如果不设置
--内存交换
限制,则应用程序可以使用您定义的内存+相同的交换量。(在这种情况下,应用程序可以使用4gb的ram和额外4gb的交换)如果应用程序不使用任何交换,则应将内存和内存交换限制设置为相同的数量

(内存交换值是应用程序可以使用的ram+交换,因此应该始终大于内存限制。)


示例:
docker run--内存4096m--内存交换4096m您的容器名称

这里解释得很清楚:

这是否回答了您的问题?嗨,阿什,这是相似的tohttps://stackoverflow.com/questions/62149553/docker-run-memory-doesnt-account-hugepages?r=Search 结果。如前所述,您可以限制docker使用的内存量,但当您使用DPDK时,它会从保留内存而不是4K页面内存中提取大量页面。所以,如果您需要在docker中运行2个dpdk应用程序,请使用“文件前缀”和“套接字限制”。但是如果你关心的是“免费”——这不是一个DPDK库发行,ViPin,其他线程有问题有关的大页面,考虑到我有有限的码头工人使用4G内存。如果是巨大的页面,即使我使用套接字限制,我相信我将能够为我的进程提供超过4G的空间,比如socket mem“-socket mem 8192”dpdk将在内部使用巨大的页面,分配将成功。相反,若我们从非大型页面分配,docker将不允许在其分配超过4G的情况下运行该进程。-当前线程,有不同的问题。我的另一个应用程序不是基于dpdk的,它实际上查询系统中的总可用内存,并分配总内存的一半用于消耗。该应用程序将看到完整的主机内存(128G),并尝试使用64G(rlimit是无限的)。现在docker的内存是4G,这样我的应用程序就不允许运行了。Hi Ashish,那么你的问题
我想在docker中使用4G内存限制的标准内存(4K)页面。我想分配一半的分配内存,而不是系统内存。我如何才能做到这一点?
。我的建议是查看用户特定实例的
docker统计数据,以获取内存,而不是获取主机总内存
感谢您一直在寻找此信息。@AshishGupta如果您正在寻找答案,您介意接受吗?谢谢Leo。是的,你的回答解决了我的问题。被接受为答案。