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