35.3. 가상 메모리 매개변수
가상 메모리 매개 변수는 /proc/sys/vm
디렉터리에 나열됩니다.
다음은 사용 가능한 가상 메모리 매개변수입니다.
vm.dirty_ratio
-
는 백분율 값입니다. 총 시스템 메모리의 이 백분율이 수정되면 시스템은
lush
작업을 사용하여 디스크 수정 사항 작성을 시작합니다. 기본값은20%입니다
. vm.dirty_background_ratio
-
백분율 값입니다. 총 시스템 메모리의 이 백분율이 수정되면 시스템은 백그라운드에서 디스크에 대한 수정 사항 쓰기를 시작합니다. 기본값은
10%입니다
. vm.overcommit_memory
큰 메모리 요청이 수락되었는지 여부를 결정하는 조건을 정의합니다. 기본값은
0
입니다.기본적으로 커널은 가상 메모리 할당 요청이 현재 메모리 양(total + 스왑)에 맞는지 확인하고 대규모 요청만 거부합니다. 그렇지 않으면 가상 메모리 할당이 부여되며 이는 메모리 과다 할당을 허용합니다.
overcommit_memory
매개변수의 값을 설정합니다.-
이 매개 변수를
1
로 설정하면 커널이 메모리 과다 할당 처리를 수행하지 않습니다. 이렇게 하면 메모리 과부하 가능성이 높아지지만, 메모리를 많이 사용하는 작업의 성능이 향상됩니다. -
이 매개 변수가
2
로 설정되면 커널은 사용 가능한 총 스왑 공간의 합계와 동일한 메모리 요청과overcommit_ratio
에 지정된 물리적 RAM의 백분율을 거부합니다. 이렇게 하면 메모리 과다 할당 위험이 줄어듭니다. 그러나 스왑 영역이 실제 메모리보다 큰 시스템에만 권장됩니다.
-
이 매개 변수를
vm.overcommit_ratio
-
overcommit_memory
가2
로 설정된 경우 물리적 RAM의 백분율을 지정합니다. 기본값은50
입니다. vm.max_map_count
-
프로세스에서 사용할 수 있는 최대 메모리 맵 영역 수를 정의합니다. 기본값은
65530
입니다. 애플리케이션에 더 많은 메모리 맵 영역이 필요한 경우 이 값을 늘립니다. vm.min_free_kbytes
예약된 여유 페이지 풀의 크기를 설정합니다. 또한 Linux 커널 페이지의 동작을 제어하는
min
_page
, low_page 및 high_page
임계값을 설정하는 작업도 담당합니다. 또한 시스템 전체에서 사용할 수 있는 최소 킬로바이트 수를 지정합니다. 이렇게 하면 작은 메모리 영역마다 특정 값이 계산되며, 각 메모리 영역에는 크기에 비례하여 예약된 여러 개의 여유 페이지가 할당됩니다.vm.min_free_kbytes
매개변수 값을 설정합니다.- 매개 변수 값을 늘리면 애플리케이션 작업 세트 사용 가능한 메모리가 효과적으로 줄어듭니다. 따라서 드라이버 버퍼를 원자 컨텍스트에서 할당해야 하는 커널 중심 워크로드에만 사용할 수 있습니다.
매개 변수 값을 줄이면 메모리가 시스템에 많이 누적되는 경우 커널이 시스템 요청을 서비스할 수 없게 될 수 있습니다.
주의극심한 값은 시스템 성능 저하가 될 수 있습니다.
vm.min_free_kbytes
를 매우 낮은 값으로 설정하면 시스템이 메모리를 효과적으로 회수하지 못하므로 시스템 충돌이 발생하고 서비스 인터럽트 또는 기타 커널 서비스에 오류가 발생할 수 있습니다. 그러나vm.min_free_kbytes
를 너무 높게 설정하면 시스템 회수 활동이 너무 증가하여 잘못된 직접 회수 상태로 인해 할당 대기 시간이 발생했습니다. 이로 인해 시스템이 메모리 부족 상태가 즉시 입력될 수 있습니다.vm.min_free_kbytes
매개 변수는min_pages
라는 페이지 회수 워터마크도 설정합니다. 이 워터마크는 페이지를 회수하는 알고리즘을 제어하는 다른 두 개의 메모리 워터마크인low_pages
및high_pages
를 결정할 때 인수로 사용됩니다.
/proc/PID/oom_adj
시스템이 메모리가 부족하고
panic_on_oom
매개 변수가0
으로 설정된 경우, 시스템이 복구될 때까지 가장 highoom_
함수에서 프로세스를 종료합니다.score가 있는 프로세스부터 시작하여oom_
killerThe
oom_adj
매개 변수는 프로세스의oom_score
를 결정합니다. 이 매개 변수는 프로세스 식별자별로 설정됩니다. 값이-17
이면 해당 프로세스의oom_killer
가 비활성화됩니다. 다른 유효한 값은-16
에서15
사이입니다.
조정된 프로세스에서 생성한 프로세스는 해당 프로세스의 the oom_score
를 상속받습니다.
vm.swappiness
swappiness 값은
0
에서200
사이이며 시스템이 익명 메모리 풀 또는 페이지 캐시 메모리 풀에서 메모리를 회수하는 정도를 제어합니다.swapp
iness
매개변수의 값 설정:- 액세스가 덜 사용되는 프로세스의 익명 매핑 메모리는 스왑 아웃하는 동시에 파일 매핑 기반 워크로드를 선호합니다. 이 기능은 스토리지의 파일에서 데이터를 사용하는 파일 서버 또는 스트리밍 애플리케이션에서 서비스 요청에 대한 I/O 대기 시간을 줄이기 위해 메모리에 상주하는 데 유용합니다.
낮은 값은 페이지 캐시를 회수하는 동시에 익명 매핑 주도 워크로드를 선호합니다(파일 매핑된 메모리). 이 설정은 파일 시스템 정보에 크게 의존하지 않는 애플리케이션에 유용하며, 동적으로 할당된 프라이빗 메모리(예: 수학 및 번호 입력 애플리케이션, QEMU와 같은 하드웨어 가상화 관리자)를 많이 활용하는 데 유용합니다.
vm.swappiness
매개변수의 기본값은60
입니다.주의-
vm.swappiness
를0
으로 설정하면 익명 메모리를 디스크로 스와핑하는 것을 적극적으로 방지할 수 있으므로 메모리 또는 I/O 집약적 워크로드가 있을 때 theoom_killer
함수에 의해 프로세스가 종료될 위험이 높아집니다. cgroupsV1
vm.swappiness
매개변수에 의해 구성된 시스템 전체 스왑이 시스템의 스왑 동작에 거의 영향을 미치지 않습니다. 이 문제로 인해 예기치 않고 일관성 없는 스왑 동작이 발생할 수 있습니다.이러한 경우
vm.force_cgroup_v2_swappiness
매개변수를 사용하는 것이 좋습니다.자세한 내용은 swappiness=0을 사용한 Premature swapping with swappiness=0을 참조하십시오. KCS 솔루션을 회수할 수 있는 pagecache가 여전히 많이 있습니다.
-
force_cgroup_v2_swappiness
-
이 제어는
cgroupsV1
에서만 사용할 수 있는 per-cgroup swappiness 값을 사용 중단하는 데 사용됩니다. 대부분의 시스템 및 사용자 프로세스는 cgroup 내에서 실행됩니다. cgroup 스왑의 기본값은 60입니다. 이로 인해 시스템 스왑 값이 시스템의 스왑 동작에 거의 영향을 미치지 않을 수 있습니다. 사용자가cgroup별 스왑piness 기능에 관심이 없는 경우force_cgroup_v2_swappiness=1
으로 시스템을 구성하여 전체 시스템에서 더 일관된 스왑 동작을 수행할 수 있습니다.
추가 리소스
-
sysctl(8)
도움말 페이지 - 메모리 관련 커널 매개변수 설정