$ systemctl status machine.slice
● machine.slice - Virtual Machine and Container Slice
Loaded: loaded (/usr/lib/systemd/system/machine.slice; static; vendor preset: disabled)
Active: active since Wed 2018-06-13 08:45:07 BST; 1 day 15h ago
Docs: man:systemd.special(7)
Tasks: 0
Memory: 717.0M
CGroup: /machine.slice
$ cd /sys/fs/cgroup/memory/machine.slice
$ cat memory.usage_in_bytes
751915008
$ cat tasks
$ cat cgroup.procs
$
machine.slice
cgroupにプロセス/スレッドがないにもかかわらず、717MBが使用されるということはどういう意味ですか?これはカーネルのバグですか?
virt-managerを使用して仮想マシンを起動して停止すると、それを再現できます。このループを繰り返すと、結果はほぼ同じです。つまり、システムから数百メガバイトが漏れないようです。
ソフトウェアバージョン
$ uname -r
4.16.14-300.fc28.x86_64
$ rpm -q systemd libvirt-daemon
systemd-238-8.git0e0aa59.fc28.x86_64
libvirt-daemon-4.1.0-2.fc28.x86_64
答え1
これは間違いではありません。明らかに、cgroupメモリ統計には、プロセスで使用されるディスクキャッシュページが含まれます。必要に応じて、要求を使用してcgroupに属するキャッシュされたページを削除できますforce_empty
。
複数のcgroupで使用されているキャッシュされたページを知りたい場合があります。 cgroup-v2.rst
(私が使用するバージョンの後続バージョン)は、次のように言います。
メモリ領域は、それをインスタンス化したcgroupによって占有され、その領域が解放されるまでcgroupによって占有されたままになります。プロセスを別のcgroupに移行しても、以前のcgroupからインスタンス化されても、メモリ使用量は新しいcgroupに移動されません。
メモリ領域は、他のcgroupに属するプロセスで使用できます。この領域がどのcgroupに含まれるかは定義されていません。ただし、時間が経つにつれて、メモリ領域は、高い回収圧力を回避するのに十分なメモリ空間を持つcgroupに含まれる可能性が高くなります。
cgroup-v1/memory.txt
また、「ページはmemcgごとにLRUに具体的にリンクされています」と表示されるため、上記の説明と同様に機能できます。この文書は「古いものであり、完全な書き換えが必要である」という免責事項から始まるので、信頼することはより困難です。
つまり、force_empty
これらすべてのページをすぐに削除するように求めることです。他のcgroupがそれを使用するには、ディスクから再度読み取る必要があります。