web-dev-qa-db-ja.com

cgroup内のプロセスがメモリ制限に達したときのLinuxカーネルの動作はどうなりますか?

cgroups v1 のメモリリソースコントローラでは、memory.limit_in_bytesファイルを使用して特定のcgroupのメモリ使用量に制限を設定できます。この制限に達したときのLinuxカーネルの動作は何ですか?

特に:

  • カーネルOOMはプロセスを強制終了しますか?その場合、プロセスのoom_scoreが考慮されますか、それとも、制限に達する原因となったメモリを要求したプロセスが強制終了されますか?
  • または、メモリの要求が拒否された場合、そのようなイベントを処理しなかった場合にのみプロセスが終了しますか?
4
dippynark

デフォルトでは、OOMはcgroupを監視しています。

memory.oom_control

cgroupのメモリ不足キラーを有効または無効にするフラグ(0または1)が含まれています。有効(0)の場合、許可されているよりも多くのメモリを消費しようとするタスクは、OOMキラーによって即座に強制終了されます。 OOMキラーは、メモリサブシステムを使用するすべてのcgroupでデフォルトで有効になっています。無効にするには、memory.oom_controlファイルに1を書き込みます。

  ~]# echo 1 > /cgroup/memory/lab1/memory.oom_control

OOMキラーが無効になっている場合、許可されているよりも多くのメモリを使用しようとするタスクは、追加のメモリが解放されるまで一時停止されます。

参考文献

2
slm