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_memory
가2
로 설정되어 있는 경우 고려해야 할 물리적 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
기능에 영향을 미칠 수 있습니다.