Menu Close
Settings Close

Language and Page Formatting Options

Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.3. 설정 도구

일반적으로 메모리 사용량은 여러 커널 매개 변수 값으로 설정됩니다. 이러한 매개 변수는 /proc 파일 시스템의 파일 내용을 변경하여 임시적으로 설정하거나 procps-ng 패키지를 통해 제공되는 sysctl 도구를 사용하여 영구적으로 변경할 수 있습니다.
예를 들어 overcommit_memory 매개 변수를 1로 임시 설정하려면 다음 명령을 실행합니다:
# echo 1 > /proc/sys/vm/overcommit_memory
이 값을 영구적으로 설정하려면 /etc/sysctl.conf에 sysctl vm.overcommit_memory=1을 추가하고 다음 명령을 실행합니다:
# sysctl -p
매개 변수를 임시적으로 설정하는 것이 시스템에 미치는 매개 변수 영향을 확인하는데 유용합니다. 그 후 매개 변수 값이 원하는 결과를 가져올 경우 이를 영구 설정할 수 있습니다.

4.3.1. Huge 페이지 설정

Huge 페이지는 인접한 메모리 영역에 의존하기 때문에 메모리가 조각화되기 전 부팅 시 huge 페이지를 지정하는 것이 좋습니다. 이를 위해 커널 부트 명령행에서 다음의 매개 변수를 추가합니다:
hugepages
부팅 시 커널에서 설정되는 영구적 huge 페이지 수를 지정합니다. 기본값은 0입니다. 시스템에 물리적으로 인접한 여유 페이지가 충분할 경우에만 huge 페이지를 할당 (또는 할당 해제)할 수 있습니다. 이러한 매개 변수에 의해 예약된 페이지를 다른 용도로 사용할 수 없습니다.
이 값은 부팅 후 /proc/sys/vm/nr_hugepages 파일 값을 변경하여 조정할 수 있습니다.
NUMA 시스템에서 이러한 매개 변수로 지정한 huge 페이지는 노드 간에 균등하게 분할됩니다. 노드의 /sys/devices/system/node/node_id/hugepages/hugepages-1048576kB/nr_hugepages 파일 값을 변경하여 런타임 시 특정 노드에 huge 페이지를 할당할 수 있습니다.
보다 자세한 정보는 기본적으로 /usr/share/doc/kernel-doc-kernel_version/Documentation/vm/hugetlbpage.txt에 설치된 커널 관련 문서에서 참조하십시오.
hugepagesz
부팅 시 커널에서 설정되는 영구적 huge 페이지 크기를 지정합니다. 사용 가능한 값은 2 MB와 1 GB입니다. 기본값은 2 MB입니다.
default_hugepagesz
부팅 시 커널에서 설정되는 영구적 huge 페이지의 기본 크기를 지정합니다. 사용 가능한 값은 2 MB 및 1 GB입니다. 기본값은 2 MB입니다.
또한 다음 매개 변수를 사용하여 런타임 시 huge 페이지 작동에 영향을 미칠 수 있습니다.
/sys/devices/system/node/node_id/hugepages/hugepages-size/nr_hugepages
지정된 NUMA 노드에 할당된 huge 페이지 수 지정 크기를 정의합니다. 이는 Red Hat Enterprise Linux 7.1에서 지원됩니다. 다음 예에서는 2048 kB huge 페이지 20 페이지를 node2에 추가하고 있습니다.
# numastat -cm | egrep 'Node|Huge'
                 Node 0 Node 1 Node 2 Node 3  Total add 

sysctl vm.overcommit_memory=1  

in /etc/sysctl.conf 

and execute 
AnonHugePages         0      2      0      8     10
HugePages_Total       0      0      0      0      0
HugePages_Free        0      0      0      0      0
HugePages_Surp        0      0      0      0      0
# echo 20 > /sys/devices/system/node/node2/hugepages/hugepages-2048kB/nr_hugepages 
# numastat -cm | egrep 'Node|Huge'
                 Node 0 Node 1 Node 2 Node 3  Total
AnonHugePages         0      2      0      8     10 
HugePages_Total       0      0     40      0     40
HugePages_Free        0      0     40      0     40
HugePages_Surp        0      0      0      0      0
/proc/sys/vm/nr_overcommit_hugepages
오버 커밋 중인 메모리를 통해 생성 및 사용 가능한 최대 추가 huge 페이지 수를 지정합니다. 이 파일에 0이 아닌 값을 작성하면 영구 huge 페이지 풀이 모두 소모된 경우 커널의 일반 페이지 풀에서 시스템에 지정된 huge 페이지 수가 표시됩니다. 이러한 나머지 huge 페이지가 사용되지 않으면 사용 해제된 커널의 일반 페이지 풀로 반환됩니다.

4.3.2. 시스템 메모리 용량 설정

다음 부분에서는 시스템에서 메모리 사용량 개선에 유용한 메모리 관련 커널 매개 변수에 대해 설명합니다. 이러한 매개 변수는 /proc 파일 시스템에서 해당 파일 값을 변경하여 테스토 용도로 임시 설정할 수 있습니다. 매개 변수가 사용 환경에 적합한 최상의 성능을 제공하는 것을 확인한 후 sysctl 명령을 사용하여 이러한 매개 변수를 영구 설정할 수 있습니다.

참고

보다 전문적인 지식은 Red Hat Enterprise Linux Performance Tuning (RH442) 교육 과정을 통해 습득하실 수 있습니다.

4.3.2.1. 가상 메모리 매개 변수

다음 부분에 나열된 매개 변수는 따로 지정하지 않는 한 /proc/sys/vm에 있습니다.
dirty_ratio
백분율입니다. 총 시스템 메모리의 백분율이 변경되면 시스템은 변경 내용을 pdflush 연산 디스크에 작성하기 시작합니다. 기본값은 20 %입니다.
dirty_background_ratio
백분율입니다. 총 시스템 메모리의 백분율이 변경되면 시스템은 변경 내용을 백그라운드 디스크에 작성하기 시작합니다. 기본값은 10 %입니다.
overcommit_memory
대량 메모리 요청을 수락 또는 거부할 지에 대해 결정하는 조건을 지정합니다.
기본값은 0입니다. 기본적으로 커널은 사용 가능한 메모리 양과 메모리 양이 너무 커서 요청 실패 수를 추정하여 추론적 메모리 오버커밋을 처리합니다. 하지만 정확한 알고리즘이 아닌 추론을 통해 메모리가 할당되기 때문에 이러한 설정에서 메모리 오버로드가 발생할 수 있습니다.
이 매개변수를 1로 설정하면 커널은 메모리 오버커밋 처리를 수행하지 않습니다. 이로 인해 메모리 오버로드 발생 가능성이 증가하지만 메모리 집약적 작업 성능은 향상됩니다.
매개 변수를 2로 설정하면 커널은 사용가능한 총 swap 공간과 overcommit_ratio에 지정된 물리적 RAM 비율 합계와 같거나 또는 큰 메모리 요청을 거부합니다. 이는 메모리 오버커밋 발생 가능성을 감소시키지만 swap 영역이 물리적 메모리 보다 큰 시스템에만 권장됩니다.
overcommit_ratio
overcommit_memory2로 설정되어 있는 경우 고려해야 할 물리적 RAM의 백분율을 지정합니다. 기본값은 50입니다.
max_map_count
프로세스에서 사용할 수 있는 최대 메모리 맵 영역 수를 지정합니다. 대부분의 경우 기본값으로 (65530)이 적절합니다. 애플리케이션에 이 파일 보다 많은 수를 맵핑해야 할 경우 이 값을 늘립니다.
min_free_kbytes
시스템 전체에 걸쳐 빈 공간의 최소 크기를 KB 단위로 지정합니다. 이는 각각의 낮은 메모리 영역에 적절한 값을 지정하는데 사용되며 그 크기에 비례하여 예약된 여유 페이지 수를 할당합니다.

주의

설정 값이 너무 낮거나 높으면 시스템이 손상될 수 있습니다. min_free_kbytes를 너무 낮은 값으로 설정하면 시스템이 메모리를 회수하지 못하게 합니다. 이로 인해 시스템이 중단되고 메모리 부족으로 인해 프로세스가 종료될 수 있습니다. 하지만 min_free_kbytes를 너무 높은 값으로 설정하면 (예: 총 시스템 메모리의 5–10%) 시스템에 바로 메모리 부족 현상이 나타나기 때문에 메모리를 회수하는데 시간을 너무 오래 소요하게 됩니다.
oom_adj
시스템의 메모리가 부족하고 panic_on_oom 매개 변수가 0로 설정되어 있으면 oom_killer 함수는 시스템을 복원할 수 있을 때 까지 프로세스를 종료하고 가장 높은 oom_score로 프로세스를 시작합니다.
oom_adj 매개 변수는 프로세스의 oom_score를 지정하는데 유용합니다. 이 매개 변수는 프로세스 식별자 마다 설정되어 있습니다. -17 값은 프로세스의 oom_killer를 비활성화합니다. 그 밖에도 -16에서 15까지의 값을 사용할 수 있습니다.

참고

프로세스의 oom_score를 상속하는 조정 과정을 통해 프로세스가 생성됩니다.
스왑 (swappiness)
0에서 100 까지의 값으로 시스템이 익명의 메모리 또는 페이지 캐시를 선호하는 정도를 제어합니다. 높은 값은 파일 시스템 성능이 향상되지만 RAM에서 덜 활동적인 프로세스를 적극적으로 스왑합니다. 낮은 값은 메모리 프로세스의 스왑을 피하기 때문에 대기 시간이 줄어들고 I/O 성능이 저하됩니다. 기본값은 60입니다.

주의

swappiness==0로 설정하면 매우 적극적으로 스왑을 피하기 위해 메모리 및 I/O 압력에서 메모리 부족으로 인한 프로세스 강제 종료의 위험이 높아집니다.

4.3.2.2. 파일 시스템 매개 변수

다음 부분에 나열된 매개 변수는 따로 지정하지 않는 한 /proc/sys/fs에 있습니다.
aio-max-nr
모든 활성 비동기 입/출력 컨텍스트에서 허용되는 최대 이벤트 수를 지정합니다. 기본값은 65536입니다. 이 값을 변경해도 커널 데이터 구조를 미리 할당하거나 크기가 변경되지 않습니다.
file-max
커널에서 할당되는 최대 파일 처리 수를 지정합니다. 기본값은 커널에 있는 files_stat.max_files 값과 일치하며 NR_FILE (Red Hat Enterprise Linux에서 8192) 또는 다음 결과 중 더 큰 값으로 설정됩니다.
(mempages * (PAGE_SIZE / 1024)) / 10
이 값을 증가시키면 사용가능한 파일 처리 수 부족으로 인한 오류를 해결할 수 있습니다.

4.3.2.3. 커널 매개 변수

다음 부분에 나열된 매개 변수는 따로 지정하지 않는 한 /proc/sys/kernel에 있습니다.
msgmax
메세지 큐에서 단일 메세지의 최대 크기를 바이트 단위로 지정합니다. 이 값은 큐의 크기 (msgmnb)를 초과해서는 안됩니다. 기본값은 65536입니다.
msgmnb
단일 메세지 큐의 최대 크기를 바이트 단위로 지정합니다. 기본값은 65536입니다.
msgmni
메세지 큐 식별자의 최대 수 (즉 큐의 최대 수)를 지정합니다. 64 비트 아키텍처 시스템에서 기본값은 1985입니다.
shmall
한 번에 시스템에서 사용할 수 있는 총 공유 메모리 양을 페이지 단위로 지정합니다. Red Hat Enterprise Linux에서 기본값은 1<<24 또는 33554432 페이지입니다.
shmmax
커널에서 허용되는 단일 공유 메모리 세그먼트의 최대 크기를 페이지 단위로 지정합니다. Red Hat Enterprise Linux에서 기본값은 1<<24 또는 33554432 바이트입니다.
shmmni
시스템 전체의 공유 메모리 세그먼트의 최대 수를 지정합니다. 모든 시스템에서 기본값은 4096입니다.
threads-max
시스템 전체에서 커널이 한번에 사용할 수 있는 최대 스레드 작업 수를 지정합니다. 기본값은 커널 매개 변수 max_threads 값과 같거나 다음과 같은 값이어야 합니다:
mempages / (8 * THREAD_SIZE / PAGE SIZE )
최저 값은 20입니다.