7.5. 시스템 메모리 용량 구성
이 섹션에서는 시스템의 메모리 사용률을 개선하는 데 유용할 수 있는 메모리 관련 커널 매개변수에 대해 설명합니다. 이러한 매개변수는
/proc
파일 시스템에서 해당 파일의 값을 변경하여 테스트 목적으로 일시적으로 설정할 수 있습니다. 사용 사례에 최적의 성능을 생성하는 값을 확인한 후 sysctl 명령을 사용하여 영구적으로 설정할 수 있습니다.
메모리 사용은 일반적으로 하나 이상의 커널 매개변수 값을 설정하여 구성됩니다. 이러한 매개변수는 /proc 파일 시스템의 파일 내용을 변경하여 일시적으로 설정하거나 procps-ng 패키지에서 제공하는 sysctl 툴로 영구적으로 설정할 수 있습니다.
예를 들어 overcommit_memory 매개변수를 1 일시적으로 1로 설정하려면 다음 명령을 실행합니다.
# echo 1 > /proc/sys/vm/overcommit_memory
이 값을 영구적으로 설정하려면
/etc/sysctl.conf
에 sysctl vm.overcommit_memory=1
을 추가한 다음 다음 명령을 실행합니다.
# sysctl -p
매개 변수를 일시적으로 설정하는 것은 매개 변수가 시스템에 미치는 영향을 결정하는 데 유용합니다. 그런 다음 매개변수의 값이 원하는 효과가 있는지 확인할 때 매개 변수를 영구적으로 설정할 수 있습니다.
참고
전문 지식을 확장하려면 Red Hat Enterprise Linux Performance Tuning(RH442) 교육 과정에도 관심이 있을 수 있습니다.
7.5.1. 가상 메모리 매개변수
이 섹션에 나열된 매개변수는 달리 표시되지 않는 한
/proc/sys/vm
에 있습니다.
- dirty_ratio
- 백분율 값입니다. 총 시스템 메모리의 이 백분율이 수정되면 시스템은
pdflush
작업을 사용하여 디스크에 수정 사항을 쓰기 시작합니다. 기본값은20%
입니다. - dirty_background_ratio
- 백분율 값입니다. 전체 시스템 메모리의 이 백분율이 수정되면 시스템은 백그라운드에서 디스크에 수정 사항을 쓰기 시작합니다. 기본값은
10%
입니다. - overcommit_memory
- 대규모 메모리 요청이 수락 또는 거부되는지 여부를 결정하는 조건을 정의합니다.기본값은
0
입니다. 기본적으로 커널은 사용 가능한 메모리 양과 너무 큰 요청 실패를 추정하여 메모리 과다 할당 처리를 수행합니다. 그러나 메모리는 정확한 알고리즘이 아닌 추론을 사용하여 할당되므로 이 설정으로 메모리를 과부하할 수 있습니다.이 매개변수를1
로 설정하면 커널에서 메모리 과다 할당 처리를 수행하지 않습니다. 이렇게 하면 메모리 과부하 가능성이 높지만 메모리 집약적인 작업의 성능이 향상됩니다.이 매개변수가2
로 설정되면 커널은 사용 가능한 총 스왑 공간 합계 및overcommit_ratio
에 지정된 물리적 RAM의 백분율보다 크거나 같은 메모리 요청을 거부합니다. 이렇게 하면 메모리 과다 할당 위험이 줄어들지만 스왑 영역이 실제 메모리보다 큰 시스템에만 권장됩니다. - overcommit_ratio
overcommit_memory
가2
로 설정될 때 고려되는 물리적 RAM의 백분율을 지정합니다. 기본값은50
입니다.- max_map_count
- 프로세스에서 사용할 수 있는 최대 메모리 맵 영역 수를 정의합니다. 기본값은 대부분의 경우
65530
입니다. 애플리케이션이 이 파일 수 이상을 매핑해야 하는 경우 이 값을 늘립니다. - min_free_kbytes
- 시스템 전체에서 사용할 수 있는 최소 킬로바이트 수를 지정합니다. 이는 각 낮은 메모리 영역에 적절한 값을 결정하는 데 사용되며, 각 영역에는 해당 크기와 비례하여 여러 개의 예약된 사용 가능한 페이지가 할당됩니다.주의극단적인 값은 시스템을 손상시킬 수 있습니다.
min_free_kbytes
를 매우 낮은 값으로 설정하면 시스템이 메모리를 회수할 수 없으므로 시스템 중단 및 OOM 종료 프로세스가 발생할 수 있습니다. 그러나min_free_kbytes
를 너무 높게 설정하면 (예: 전체 시스템 메모리의 5-10%)로 인해 시스템이 메모리 부족 상태가 즉시 입력되어 시스템이 메모리를 회수하는 데 시간이 너무 많이 소비됩니다. - oom_adj
- 시스템이 메모리 부족하고
panic_on_oom
매개변수가0
으로 설정된 경우oom_killer
기능은oom_score
가 가장 높은 프로세스에서 시스템을 복구할 때까지 프로세스를 종료합니다.oom_adj
매개변수는 프로세스의oom_score
를 결정하는 데 도움이 됩니다. 이 매개변수는 프로세스 ID별로 설정됩니다. 값-17
은 해당 프로세스의oom_killer
를 비활성화합니다. 기타 유효한 값은-16
에서15
사이입니다.참고조정된 프로세스에서 생성한 프로세스는 프로세스의oom_score
를 상속합니다. - swappiness
0
에서100
까지의 swappiness 값은 시스템이 익명 메모리 또는 페이지 캐시를 선호하는 정도를 제어합니다. 값이 높은 경우 파일 시스템 성능이 향상되고 활성 프로세스가 RAM에서 덜 자주 교체됩니다. 값이 낮으면 메모리가 부족하지 않으므로 일반적으로 I/O 성능으로 인해 대기 시간이 줄어듭니다. 기본값은60
입니다.주의swappiness==0
을 설정하면 매우 공격적으로 스와핑되지 않으므로 강력한 메모리 및 I/O 부족으로 OOM이 종료될 위험이 증가합니다.
7.5.2. 파일 시스템 매개변수
이 섹션에 나열된 매개 변수는 달리 표시되지 않는 한
/proc/sys/fs
에 있습니다.
- aio-max-nr
- 모든 활성 비동기 입력/출력 컨텍스트에서 허용되는 최대 이벤트 수를 정의합니다. 기본값은
65536
입니다. 이 값을 수정해도 커널 데이터 구조의 크기를 사전 할당하거나 조정하지 않습니다. - file-max
- 전체 시스템에 대한 최대 파일 처리 수를 결정합니다. Red Hat Enterprise Linux 7의 기본값은 커널이 시작될 때 사용할 수 있는 사용 가능한 메모리 페이지의 최대
8192
또는 10분의 1입니다.이 값을 늘리면 사용 가능한 파일 처리 부족으로 인한 오류를 해결할 수 있습니다.
7.5.3. 커널 매개변수
/proc/sys/kernel/
디렉터리에 있는 다음 매개 변수의 기본값은 사용 가능한 시스템 리소스에 따라 부팅 시 커널에서 계산할 수 있습니다.
- msgmax
- 메시지 큐에서 단일 메시지의 최대 허용 크기(바이트)를 정의합니다. 이 값은 큐(
msgmnb
)의 크기를 초과해서는 안 됩니다. 시스템의 현재msgmax
값을 확인하려면 다음을 사용합니다.# sysctl kernel.msgmax
- msgmnb
- 단일 메시지 큐의 최대 크기(바이트)를 정의합니다. 시스템의 현재
msgmnb
값을 확인하려면 다음을 사용합니다.# sysctl kernel.msgmnb
- msgmni
- 최대 메시지 큐 식별자 수를 정의하므로 최대 대기열 수를 정의합니다. 시스템의 현재
msgmni
값을 확인하려면 다음을 사용합니다.# sysctl kernel.msgmni
- Shmall
- 시스템에서 동시에 사용할 수 있는 공유 메모리 페이지의 총 양을 정의합니다. 예를 들어, 페이지는 AMD64 및 Intel 64 아키텍처의 4096바이트입니다.시스템의 현재
shmall
값을 확인하려면 다음을 사용합니다.# sysctl kernel.shmall
- shmmax
- 커널에서 허용하는 단일 공유 메모리 세그먼트의 최대 크기(바이트)를 정의합니다. 시스템의 현재
shmmax
값을 확인하려면 다음을 사용합니다.# sysctl kernel.shmmax
- shmmni
- 시스템 전체 공유 메모리 세그먼트 수를 정의합니다. 기본값은 모든 시스템에서
4096
입니다. - threads-max
- 커널에서 사용할 수 있는 시스템 전체 최대 스레드 수를 한 번에 정의합니다. 시스템의 현재
threads-max
값을 확인하려면 다음을 사용합니다.# sysctl kernel.threads-max
기본값은 다음과 같습니다.mempages / (8 * THREAD_SIZE / PAGE SIZE )
최소 값은20
입니다.