cgroupを使用して、ユーザーが使用できるメモリ量を制限したい(systemdでUbuntu 16.04を使用)。
user-.sliceのMemoryLimitプロパティを設定したら、そのcgroupに反映されている変更を確認できますmemory.limit_in_bytes
。
ただし、ユーザーがVirtualBox VMを実行しているときにVirtualBoxが2 GBのRAMを使用しているように見えても(ps
以下の出力を参照)、そのメモリはcgroupmemory.usage_in_bytes
ファイルに反映されません。
$ cat /sys/fs/cgroup/memory/user.slice/user-1001.slice/memory.usage_in_bytes
1353863168
cgroupsファイルにVirtualBoxプロセスIDを表示できますtasks
。
$ ps un -p 19678
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
1001 19678 97.4 29.4 4660560 2378040 ? Sl 07:25 3:48 /usr/lib/virtualbox/VirtualBox
$ grep 19678 /sys/fs/cgroup/memory/user.slice/user-1001.slice/tasks
19678
memory.stat
cgroup ファイルには次の値が表示されます。
$ cat /sys/fs/cgroup/memory/user.slice/user-1001.slice/memory.stat
cache 423411712
rss 880754688
rss_huge 331350016
mapped_file 176910336
dirty 307200
writeback 0
pgpgin 14357052
pgpgout 14129610
pgfault 14533957
pgmajfault 16595
inactive_anon 546553856
active_anon 447401984
inactive_file 151785472
active_file 158326784
unevictable 36864
hierarchical_memory_limit 5368709120
total_cache 423411712
total_rss 880754688
total_rss_huge 331350016
total_mapped_file 176910336
total_dirty 307200
~によるとメモリ.txt、rss + cache
より正確なバージョンを提供する必要がありますmemory.usage_in_bytes
。結果は1304166400以下です。
それでは、VirtualBoxのメモリが欠落しているのはなぜですか?
編集する:詳細な出力とドキュメントmemory.stat
が追加されました。
答え1
感じがあるこのファイル多くの助けになります(特にセクション5.5と5.2)。ここにまとめてみようと思います。
私が得た最良の説明は、提供された数字はmemory.usage_in_bytes
非常に正確ではないが、何かが使用するメモリの量に関する一般的なアイデアを提供することです。memory.stat
さまざまなプロセスで使用されるメモリについて、より正確な(より複雑ですが)アイデアを提供できます。メモリ使用量がここに表示されない場合は、より大きな問題がある可能性があります。
編集する:ドキュメントのセクション 5.2 を読み続けると、いくつかの追加情報を見つけることができます。
匿名およびスワップキャッシュメモリのみが「rss」統計の一部として一覧表示されます。これを実際の「常駐セットサイズ」またはcgroupによって使用される物理メモリ量と混同しないでください。 「rss + file_mapped」は、cgroupの常駐セットサイズを提供します。
この場合、現在見ている問題に対する解決策はまだないため、virtualbox プロセスの所有者が virtualbox プロセスで使用するすべてのページ キャッシュの所有者ではないと考えられます。
私が推奨する最後の完全性チェックは、OOM Killerログを確認し、OOM Killerが有効になっていることを確認することです。 OOM キラーが有効になると、メモリログから奇妙な結果が得られます。