
메모리 리소스 컨트롤러c그룹 v1이 memory.limit_in_bytes
파일을 사용하여 특정 cgroup에 대한 메모리 사용량 제한을 설정할 수 있습니다. 이 제한에 도달하면 Linux 커널은 어떤 동작을 취합니까?
특히:
- 커널 OOM이 프로세스를 종료합니까? 그렇다면
oom_score
프로세스의 메모리가 고려됩니까, 아니면 메모리 요청으로 인해 한계에 도달한 프로세스가 종료됩니까? - 아니면 메모리 요청이 거부됩니까? 이 경우 해당 이벤트를 처리하지 않으면 프로세스가 종료됩니까?
답변1
기본적으로 OOM은 cgroup을 감독합니다.
memory.oom_control
cgroup의 메모리 부족 종료 루틴을 활성화하거나 비활성화하는 플래그(0 또는 1)를 포함합니다. 활성화된 경우(0) 허용된 메모리보다 더 많은 메모리를 사용하려고 시도하는 작업은 OOM 종료기에 의해 즉시 종료됩니다. 기본적으로 OOM Killer는 메모리 하위 시스템을 사용하는 모든 cgroup에서 활성화되어 있습니다. 이를 비활성화하려면 memory.oom_control 파일에 1을 쓰십시오.
~]# echo 1 > /cgroup/memory/lab1/memory.oom_control
OOM Killer가 비활성화되면 허용된 것보다 더 많은 메모리를 사용하려고 시도하는 작업은 더 많은 메모리가 해제될 때까지 일시 중지됩니다.