lxc 컨테이너가 소비할 수 있는 메모리 양을 어떻게 알 수 있나요?

lxc 컨테이너가 소비할 수 있는 메모리 양을 어떻게 알 수 있나요?

ansibleInnoDB 버퍼 풀 크기를 사용 가능한 메모리의 백분율로 설정 하려고 합니다 . 그런데 신고 ansible_memtotal_mb하고free호스트에는 얼마나 많은 메모리가 있습니까?. 컨테이너 내부에 사용 가능한 메모리 양을 계산하는 방법은 무엇입니까? 컨테이너 이름은 미리 알 수 없습니다.

UPD저는 데비안을 실행 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

답변1

너무 길어요.

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 루트가 마운트되었으므로 /sys/fs/cgroup해당 정보와 추가 경로를 사용하여 /memory/cv/my-firefox컨테이너에 설정된 모든 메모리 제한을 쿼리할 수 있습니다.

이 예에서 한도는 256M입니다.

추신: free 및 ansible_memtotal_mb는 호스트 기반이며 컨테이너를 지원하지 않습니다. 나는 Ansible에 대해 모르지만 이 정보를 수집하기 위해 사용자 정의 사실을 작성할 수 있는 Puppet의 사실과 비슷한 것이 있을 것이라고 생각합니다.

관련 정보