37.3. 가상 메모리 매개변수

가상 메모리 매개변수는 /proc/sys/vm 디렉터리에 나열됩니다.

다음은 사용 가능한 가상 메모리 매개변수입니다.

vm.dirty_ratio
백분율 값입니다. 전체 시스템 메모리의 이 백분율이 수정되면 시스템은 pdflush 작업으로 디스크에 수정 사항을 쓰기 시작합니다. 기본값은 20% 입니다.
vm.dirty_background_ratio
백분율 값입니다. 전체 시스템 메모리의 이 백분율이 수정되면 시스템은 수정 사항을 백그라운드에서 디스크에 쓰기 시작합니다. 기본값은 10 %입니다.
vm.overcommit_memory

큰 메모리 요청이 허용되거나 거부되는지 여부를 결정하는 조건을 정의합니다. 기본값은 0 입니다.

기본적으로 커널은 가상 메모리 할당 요청이 현재 메모리 양(total + 스왑)에 맞는지 확인하고 대규모 요청만 거부합니다. 그렇지 않으면 가상 메모리 할당이 부여되며 이는 메모리 과다 할당을 허용합니다.

overcommit_memory 매개변수 값을 설정합니다.

  • 이 매개변수를 1 로 설정하면 커널은 메모리 과다 할당 처리를 수행하지 않습니다. 이렇게 하면 메모리 과부하가 증가하지만 메모리 집약적 작업의 성능이 향상됩니다.
  • 이 매개변수를 2 로 설정하면 커널은 사용 가능한 총 스왑 공간의 합계와 동일한 메모리 요청 및 overcommit_ratio 에 지정된 물리적 RAM의 백분율보다 큽니다. 이렇게 하면 메모리를 과다 할당할 위험이 줄어들지만 실제 메모리보다 큰 스왑 영역이 있는 시스템에만 권장됩니다.
vm.overcommit_ratio
overcommit_memory2 로 설정된 경우 고려되는 물리적 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 를 너무 높게 설정하면 시스템 회수 작업이 증가하여 직접 회수 상태가 false로 인한 할당 대기 시간이 발생합니다. 이로 인해 시스템이 메모리 부족 상태가 될 수 있습니다.

    vm.min_free_kbytes 매개변수는 min_pages 라는 페이지 회수 워터마크도 설정합니다. 이 워터마크는 페이지 회수 알고리즘을 관리하는 두 개의 다른 메모리 워터마크, low_pages, high_pages 를 결정할 때 요인으로 사용됩니다.

/proc/PID/oom_adj

시스템이 메모리가 부족하고 panic_on_oom 매개 변수가 0 으로 설정된 경우 oom_killer 함수가 시스템이 복구될 때까지 oom_score 가 가장 높은 프로세스부터 프로세스를 종료합니다.

oom_adj 매개변수는 프로세스의 oom_score 를 결정합니다. 이 매개변수는 프로세스 식별자별로 설정됩니다. -17 값은 해당 프로세스에 대한 oom_killer 를 비활성화합니다. 기타 유효한 값의 범위는 -16 에서 15 사이입니다.

참고

조정된 프로세스에서 생성한 프로세스는 해당 프로세스의 oom_score 를 상속합니다.

vm.swappiness

swappiness 값은 0 에서 200 사이이며 시스템이 익명 메모리 풀 또는 페이지 캐시 메모리 풀에서 메모리를 회수하는 정도를 제어합니다.

swappiness 매개변수 값을 설정합니다.

  • 값이 높으면 파일 매핑된 워크로드가 선호되고 덜 적극적으로 액세스되는 프로세스의 RAM에 매핑되지 않는 메모리를 교체합니다. 이는 스토리지의 파일에서 서비스 요청에 대한 I/O 대기 시간을 줄이기 위해 메모리에 상주하는 파일 서버 또는 스트리밍 애플리케이션에 유용합니다.
  • 낮은 값은 페이지 캐시(파일 매핑된 메모리)를 회수하는 동안 익명 매핑 기반 워크로드를 선호합니다. 이 설정은 파일 시스템 정보에 크게 의존하지 않는 애플리케이션에 유용하며, 지현성 및 숫자 분쇄 애플리케이션, QEMU와 같은 하드웨어 가상화 관리자 등 동적으로 할당된 개인 메모리와 개인 메모리를 많이 활용합니다.

    vm.swappiness 매개변수의 기본값은 60 입니다.

    주의

    vm.swappiness0 으로 설정하면 익명 메모리를 디스크로 스왑하지 않도록 적극적으로, 메모리 또는 I/O 집약적 워크로드에서 oom_killer 기능에 의해 프로세스가 종료될 위험이 높아집니다.

추가 리소스