我在使用“ docker run --memory”时遇到两个问题。docker以特权模式运行。我想知道是否会出现这种情况。
我正在容器中运行基于DPDK的应用程序。我的服务器总共有128G内存,而我的容器内存资源限制为4G。我可以在docker stats中看到它。
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内存被限制为4G之后。应用程序能够分配32G大页面内存以及其他非大页面内存。是预期的吗?docker是否运行--memory选项仅适用于非巨大页面内存?
root@server# docker exec -ti my_docker bash
root@4deda4634b22:/#
root@4deda4634b22:/# ps aux |grep riot
root 893 17.2 0.0 68345740 105260 pts/0 Sl 05:54 1:02 /app/riot <<<<<< application.
root@4deda4634b22:/# cat /proc/meminfo |grep -i huge
AnonHugePages: 909312 kB
ShmemHugePages: 0 kB
**HugePages_Total: 32**
**HugePages_Free: 0**
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 1048576 kB
root@4deda4634b22:/# ls -rlt /mnt/huge/* | wc -l
32
我通常通过docker run -it --privileged -v /sys/bus/pci/drivers:/sys/bus/pci/drivers -v /sys/kernel/mm/hugepages:/sys/kernel/mm/hugepages -v /sys/devices/system/node:/sys/devices/system/node -v /dev:/dev
传递对大型页面和vfio设备的访问权限。
看起来您好像丢失了一样。