5.4. 용량 튜닝

다음 부분에서는 메모리, 커널, 파일 시스템 용량, 각각에 관련된 매개 변수, 이러한 매개 변수의 조정에 있어서 절충 사항에 대한 개요를 설명합니다.
튜닝하는 도중 이러한 값을 일시적으로 설정하려면 proc 파일 시스템에서 해당 파일에 원하는 값을 echo 명령으로 실행합니다. 예를 들어, overcommit_memory를 일시적으로 1로 설정하려면 다음을 실행합니다:
# echo 1 > /proc/sys/vm/overcommit_memory
proc 파일 시스템에서 매개 변수로의 경로는 변경에 영향을 받는 시스템에 따라 다르다는 것에 유의합니다.
이 값을 영구적으로 설정하려면 sysctl 명령을 사용해야 합니다. 보다 자세한 내용은 http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/운용 가이드에서 참조하십시오.

튜닝 가능한 용량 관련 메모리

다음의 각 매개 변수는 proc 파일 시스템에 있는 /proc/sys/vm/에 있습니다.
overcommit_memory
대량 메모리 요청을 수락 또는 거부할 지에 대해 결정하는 조건을 지정합니다. 이러한 매개 변수에 대해 세 가지 사용 가능한 값이 있습니다:
  • 0 — 기본 설정입니다. 커널은 사용 가능한 메모리 양을 추정하고 잘못된 요청을 실패시켜 휴리스틱 메모리 오버커밋 처리를 수행합니다. 불행히도 메모리는 정확한 알고리즘이 아닌 휴리스틱 알고리즘을 사용하여 할당되므로 이러한 설정은 시스템에서 사용가능한 메모리가 오버로드되게 할 수 있습니다.
  • 1 — 커널은 메모리 오버커밋 처리를 수행하지 않습니다. 이러한 설정에서 메모리 오버로드 가능성은 증가하므로 메모리 집약적 작업을 위한 성능입니다.
  • 2 — 커널은 총 사용 가능한 스왑의 합계와 overcommit_ratio에 지정된 물리적 RAM의 백분율 보다 메모리가 크거나 동일한 경우 요청을 거부합니다. 메모리 오버커밋의 위험을 줄이고자 할 경우 이 설정이 가장 적합니다.

    참고

    이 설정은 스왑 공간이 실제 메모리보다 큰 시스템의 경우에만 권장됩니다.
overcommit_ratio
overcommit_memory2로 설정되어 있는 경우 고려해야 할 물리적 RAM의 백분율을 지정합니다. 기본값은 50입니다.
max_map_count
프로세스가 사용할 수 있는 메모리 맵 영역의 최대 수를 지정합니다. 대부분의 경우 기본값으로 65530이 적절합니다. 애플리케이션에 이 파일 보다 많은 수를 매핑해야 하는 경우 이 값을 늘립니다.
nr_hugepages
커널에서 설정되는 hugepage 수를 지정합니다. 기본값은 0입니다. 시스템에 물리적으로 연속된 빈 페이지가 충분할 경우에만 hugepage를 할당 (또는 할당 해제)할 수 있습니다. 이러한 매개 변수에 의해 예약된 페이지를 다른 목적으로 사용할 수 없습니다. 보다 자세한 내용은 /usr/share/doc/kernel-doc-kernel_version/Documentation/vm/hugetlbpage.txt에 있는 설치된 문서에서 참조하십시오.

튜닝 가능한 용량 관련 커널

다음의 각 매개 변수는 proc 파일 시스템에 있는 /proc/sys/kernel/에 있습니다.
msgmax
메세지 큐에서 단일 메세지의 최대 크기를 바이트 단위로 지정합니다. 이 값은 큐의 크기 (msgmnb)를 초과해서는 안됩니다. 기본값은 65536입니다.
msgmnb
단일 메세지 큐의 최대 크기를 바이트 단위로 지정합니다. 기본값은 65536 바이트입니다.
msgmni
메세지 큐 식별자의 최대 수를 지정합니다 (따라서 큐의 최대 수). 64 비트 아키텍처 시스템에서 기본값은 1985이고 32 비트 아키텍처에서 기본값은 1736입니다.
shmall
한 번에 시스템에서 사용할 수 있는 총 공유 메모리 양을 바이트 단위로 지정합니다. 64 비트 아키텍처 시스템에서 기본값은 4294967296이며 32 비트 아키텍처에서 기본값은 268435456입니다.
shmmax
커널이 허용하는 최대 공유 메모리 세그먼트를 바이트 단위로 정의합니다. 64 비트 아키텍처 시스템에서 기본값은 68719476736이고 32 비트 아키텍처의 경우 기본값은 4294967295입니다. 하지만 커널은 이 보다 더 큰 값을 지원함에 유의합니다.
shmmni
시스템 전체의 공유 메모리 세그먼트의 최대 수를 지정합니다. 64 비트 및 32 비트 아키텍처에서 기본값은 4096입니다.
threads-max
시스템 전체에서 커널이 한번에 사용할 스레드 (작업)의 최대 수를 지정합니다. 기본값은 커널 max_threads 값과 동일합니다. 사용되는 식은 다음과 같습니다:
max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE )
threads-max의 최저 값은 20입니다.

튜닝 가능한 용량 관련 파일 시스템

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

튜닝 가능한 메모리 부족 종료

OOM (Out of Memory)는 스왑 공간을 포함한 모든 사용 가능한 메모리가 할당된 컴퓨터 상태를 말합니다. 기본적으로 이러한 사항은 시스템 패닉의 원인이 되어 예상대로 작동을 중지합니다. 하지만 /proc/sys/vm/panic_on_oom 매개 변수를 0으로 설정하면 OOM 발생 시 커널이 oom_killer 기능을 호출합니다. 일반적으로 oom_killer는 악성 프로세스를 종료하고 시스템을 유지합니다.
다음과 같은 매개 변수는 프로세스 마다 설정할 수 있으며, oom_killer 기능에 의해 강제 종료되는 프로세스의 제어 능력을 증가시킵니다. 이는 proc 파일 시스템에 있는 /proc/pid/에 있으며 여기서 pid는 프로세스 ID 번호입니다.
oom_adj
값을 -16에서 15로 지정하면 프로세스의 oom_score를 결정하는데 도움이 됩니다. oom_score 값이 높으면 oom_killer에 의해 프로세스가 종료될 가능성이 높아집니다. oom_adj 값을 -17로 설정하면 프로세스의 oom_killer가 비활성화됩니다.

중요

조정된 프로세스에 의해 생성된 모든 프로세스는 해당 프로세스의 oom_score를 상속합니다. 예를 들어, sshd 프로세스가 oom_killer 기능에서 보호되고 있을 경우 SSH 세션에 의해 시작된 모든 프로세스도 모두 보호됩니다. 이는 OOM 발생시 시스템을 구제하기 위한 oom_killer 기능에 영향을 미칠 수 있습니다.

 

+ Recent posts