시스템 서비스의 메모리 제한 이해: 프로세스별로 또는 결합되어 있습니까?

시스템 서비스의 메모리 제한 이해: 프로세스별로 또는 결합되어 있습니까?

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 매뉴얼 페이지에 설명되어 있습니다.

관련 정보