Memory
如何找出允許使用多少記憶體 lxc 容器?
我正在嘗試
ansible
將 InnoDB 緩衝池大小設置為可用記憶體的某個百分比。但是ansible_memtotal_mb
並free
報告主機有多少記憶體。如何確定容器內部有多少可用記憶體?容器名稱事先不知道。UPD我正在執行 debian
jessie
,並將cgroup_enable=memory
參數傳遞給核心。host ==== # lxc-checkconfig Kernel configuration not found at /proc/config.gz; searching... Kernel configuration found at /boot/config-3.16.0-4-amd64 --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled --- Control groups --- Cgroup: enabled Cgroup clone_children flag: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled File capabilities: enabled Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig # grep cgroup /var/lib/lxc/sta/config lxc.cgroup.memory.limit_in_bytes = 1000M # mount | grep memory cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory) # cd /sys/fs/cgroup/memory # cat memory.limit_in_bytes 18446744073709551615 # cat lxc/sta/memory.limit_in_bytes 1048576000 container ========= $ cat /proc/self/cgroup 9:perf_event:/lxc/sta 8:blkio:/ 7:net_cls,net_prio:/lxc/sta 6:freezer:/lxc/sta 5:devices:/ 4:memory:/ 3:cpu,cpuacct:/ 2:cpuset:/lxc/sta 1:name=systemd:/user.slice/user-0.slice/session-10304.scope/system.slice/ssh.service # mount | grep memory cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory) # cd /sys/fs/cgroup/memory # cat memory.limit_in_bytes 18446744073709551615 # cat lxc/sta/memory.limit_in_bytes 1048576000
tl;博士
cat /sys/fs/cgroup/memory$(cat /proc/self/cgroup | grep memory | cut -d: -f3)/memory.limit_in_bytes
或者
cat $(mount | grep cgroup | grep memory | cut -d' ' -f3)$(cat /proc/self/cgroup | grep memory | cut -d: -f3)/memory.limit_in_bytes
如果您的預設容器配置允許來自容器內的主機 cgroup 資訊(基於 lxc.mount.auto 設置),您可以簡單地解析 cgroup 資訊,如下所示
從 /proc/self/cgroup 檢查您的 cgroup 資訊
root@my-firefox:/# grep memory /proc/self/cgroup 4:memory:/cv/my-firefox
現在根據您的 cgroup 掛載點(可以從 /proc/mounts 中找到),驗證記憶體限製文件內容
root@my-firefox:/# cd /sys/fs/cgroup/memory/cv/my-firefox/ root@my-firefox:/sys/fs/cgroup/memory/cv/my-firefox# cat memory.limit_in_bytes 268435456
在我上面的例子中,cgroup root 被掛載,
/sys/fs/cgroup
所以使用該資訊和附加路徑/memory/cv/my-firefox
,我可以查詢為容器設置的所有記憶體限制本例限制為 256M
PS:free & ansible_memtotal_mb 是基於主機的,它們不支持容器。我不知道 ansible,但我認為它會具有類似於 puppet 中的事實,您可以在其中編寫自定義事實來收集此資訊