GNU/Linux >> Linux の 問題 >  >> Linux

systemd によって管理されるサービスのメモリを制限する方法

systemd.exec のマンページ LimitXXXX 命令のリストと、それらを ulimit と比較した便利な表があります。 setrlimit() によるオプション システムコール。

プロセスのアドレス空間全体を制限するには (ulimit -v ) LimitAS= を使用 .それ以外の場合は、スタックのみを制限します (ulimit -s ) LimitSTACK= を使用 またはデータ セグメント (ulimit -d ) LimitDATA= を使用

setrlimit()によると これらの制限により、追加のメモリの割り当てが失敗します。 STACK と AS は、制限に達し、スタックを拡張する必要がある場合 (プログラムがこれを処理しなかった場合)、sigsegv でプログラムを終了します。


Systemd は、https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html で説明されているように、MemoryLimit オプションによるメモリ使用量の制限をサポートしています。

(サービスごとに) 許可されている最大メモリが使い果たされた場合にシステムが状況を処理する方法は、基盤となる cgroups の実装と systemd がリソース制御を実装する方法の両方に依存します。プロセスは (OOM キラーによって) 強制終了されると思います。


ulimit に類似した制限の場合:

man systemd.exec

...
LimitAS=(like ulimit -v)
...
LimitRSS=(like ulimit -m)
...

Linux
  1. Linux –単一のLinuxプロセスのメモリ使用量を制限しますか?

  2. パイプラインはメモリ使用量をどのように制限しますか?

  3. 一連のSystemdサービスファイルのユーザーを変更するにはどうすればよいですか?

  1. Systemdサービスをパッケージ化する方法は?

  2. LinuxでSystemdサービスを一覧表示する方法

  3. systemd サービスの ulimit 値を設定する方法

  1. ulimit 設定は Linux にどのように影響しますか?

  2. アプリケーションのメモリ使用量を制限するには?

  3. 単一の Linux プロセスのメモリ使用量を制限する