システムサービスのメモリ制限について:プロセスごとに、または組み合わせていますか?

システムサービスのメモリ制限について:プロセスごとに、または組み合わせていますか?

Memory: 300.3M (limit: 500.0M私はLinuxシステムで実行されているvcoagent.serviceというsystemdサービスがあり、サービス()に指定されたメモリ制限が管理するプロセスにどのように適用されるかを理解したいと思います。

以下は、systemctl status vcoagent.serviceの関連出力です。

● vcoagent.service - Observability Agent
     Loaded: loaded (/etc/systemd/system/vcoagent.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-04-10 11:05:17 +07; 3h 38min ago
   Main PID: 134018 (vcoagent)
      Tasks: 59 (limit: 18691)
     Memory: 300.3M (limit: 500.0M)
     CGroup: /system.slice/vcoagent.service
             ├─134018 /root/vcoagent --opampServer=false --nodeExporter=true
             ├─134031 /root/vcoagent --opampServer=false --nodeExporter=true
             ├─134038 /proc/134031/fd/3
             └─134050 /proc/134031/fd/8 --config /tmp/otelcol/otelcol-config.yaml

私の質問は:メモリ制限(500.0M)がサービス(134018など)によって管理されている各プロセスに個別に適用されますか、それともすべてのプロセスの統合制限ですか?134031

たとえば、プロセスが個々のメモリ制限を超えたが、すべてのプロセスの合計メモリ使用量がまだ少ない場合、500.0Mサービスはメモリ制限内にあると見なされますか?

サービスコンテキストでシステムメモリ制限を適用する方法を明確に説明していただきありがとうございます。ありがとうございます!

答え1

Linuxは両方のメカニズムを使用して制限をサポートします。

  • プロセスごとのulimit(主に)
  • cgroups は、cgroup に追加されるプロセスグループの総数を制限します。

これを含むsystemdによって設定されたほとんどの制限はcgroupに基づいています。 systemd がサービスを作成すると、サービスのすべてのプロセスを cgroup に入れ、cgroup に制限を適用します。したがって、この数字はcgroup全体の合計です。

これのほとんどはsystemd.resource-controlのマニュアルページで説明されています。

関連情報