web-dev-qa-db-ja.com

Linuxでプロセスが消費できるメモリサイズを制限する方法

Mongoデーモンのメモリ使用量を4Gに制限する方法を見つけようとしています。

Memlockでlimits.confを使用することを考えましたが、それが正しい方法かどうかはわかりません。

limits.confのマニュアルページからulimitはプロセスではなくユーザーに参照されていること、また「memlock」の定義が明確ではないことを理解しました。

memlock
  maximum locked-in-memory address space (KB)

プロセスのメモリ使用量を制限するにはどうすればよいですか?

4
smintz

MongoDBは、すべてのストレージにメモリマップファイルを使用します。これらのファイルのサイズを制限できるようです。

ただし、上部に表示される大きなメモリ数に隣接している場合は、Mongoの物理メモリ使用量と(正確に)対応していません。そのメモリの一部は、ioキャッシュ設定に応じて、マップされたディスクになります。 メモリ使用量の確認(MongoDB) を参照してください。

1
Dana the Sane

memlockは、スワップアウトできないページのユーザー使用を制限します。巨大なページ。それはあなたが探しているものではありません。

MongoDBではVSSにデータセット全体が含まれるため、ulimit -vは使用しないでください。 ulimit -mを試してRSSを制限することもできますが、それはLinux2.6以降では機能しません。たとえそうだったとしても、制限に達すると、プログラムがメモリを割り当てようとして失敗するため、奇妙な動作が発生する可能性があります。

より良いアプローチは cgroups を使用することです。 jlebarには チュートリアル があります。 cgroupsとulimitの2つの重要な点は、

  1. できます
  2. RSSの使用量が制限に近づくと、Linuxの通常のメモリ再利用アルゴリズムが開始されます。MongoDBの場合、これにより、キャッシュされたデータが削除されると思います。
1
sciurus