web-dev-qa-db-ja.com

lxcコンテナが消費できるメモリの量を確認するにはどうすればよいですか?

ansibleにInnoDBバッファープールサイズを使用可能なメモリの数パーセントに設定させようとしています。しかし、ansible_memtotal_mbfreeホストのメモリ容量 を報告します。コンテナ内から使用可能なメモリ量を確認するにはどうすればよいですか?コンテナ名は事前にわかりません。

[〜#〜] 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
4
x-yuri

tl; dr

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です。

PS:free&ansible_memtotal_mbはホストベースであり、コンテナーを認識しません。私はansibleを認識していませんが、この情報を収集するためのカスタムファクトを記述できる、puppetのファクトに似たものがあると思います

3
VenkatC