문서유형ㅣ기술정보
분야ㅣ관리/환경설정
적용제품버전ㅣTibero 7.2.4.
문서번호ㅣTADTI139
개요
방법
1. sysctl.conf 설정
커널 파라미터 | 값 |
|---|---|
| kernel.sem | 10000, 32000, 10000, 10000 |
| kernel.shmall | ceil(shmmax/PAGE_SIZE) |
| kernel.shmmax | 물리적 메모리의 절반 (byte) |
| kernel.shmmni | 4096 |
- kernel.sem
- SEMMSL: 배열당 최대 세마포어 수
- SEMMNS: 시스템 전체 최대 세마포어 수
- SEMOPM: 세마포어 호출당 최대 operation 수
- SEMMNI: 최대 배열 수
- kernel.shmall
- 시스템 전체에서 사용 가능한 공유 메모리의 최대 크기
- kernel.shmmax
- Linux에서 공유 메모리 세그먼트의 최대 크기를 제한
- Tibero 기동 시 TSM만큼의 하나의 세그먼트가 생성되며, TOTAL_SHM_SIZE가 이 값보다 작으면 기동되지 않음
- kernel.shmmni
- 공유 세그먼트의 최대 개수를 의미
- Tibero 1대를 기동할 때 1개의 세그먼트가 생성됨
- 4096으로 설정하면 충분히 크게 설정된 것.
- 현재 사용 중인 세그먼트 수는 ipcs -m 명령으로 확인 가능
주의해당 파라미터 외에도 설치 안내서를 참고해 kernel 파라미터를 설정해야 합니다.
fs.nr_open : 하나의 프로세스가 열 수 있는 최대 파일 개수
fs.file-max : 시스템에서 임의의 인스턴스에서 지원하는 최대 파일 처리 수
fs.aio-max-nr : 시스템에서 서버에서 처리할 수 있는 최대 비동기 I/O 작업 수
net.ipv4.ip_local_port_range : 클라이언트가 외부 연결 시 자동으로 할당받을 수 있는 포트 번호 범위
net.core.rmem_default : 네트워크 데이터를 받을 때 사용하는 기본 수신 버퍼 크기 net.core.wmem_default : 수신 버퍼가 늘어날 수 있는 최대 크기 net.core.rmem_max : 네트워크 데이터를 보낼 때 사용하는 기본 송신 버퍼 크기 net.core.wmem_max : 송신 버퍼가 늘어날 수 있는 최대 크기
2. kernel 값 설정 예시
이 섹션에서는 각 kernel 값이 어떤 제한을 설정하는지 및 설정 예시를 확인합니다.
2.1 semaphore 설정 및 테스트
Kernel.sem 파라미터는 세마포어 관련 설정으로 Tibero에서 필요로 하는 세마포어 값을 고려하여 설정해야 합니다.
매뉴얼에 기술된 대로 kernel.sem=10000 32000 10000 10000 설정 시 아래와 같이 설정
[tibero@tibero ~]$ ipcs -sl ------ Semaphore Limits -------- max number of arrays = 10000 max semaphores per array = 10000 max semaphores system wide = 32000 max ops per semop call = 10000 semaphore max value = 32767
Tibero 기동 시 사용되는 Semaphore 사용량 확인
[tibero@tibero path]$ ipcs -su ------ Semaphore Status -------- used arrays = 164 -- SEMMNI allocated semaphores = 328 -– SEMMNS
최소값으로 기동 테스트
[tibero@tibero path]$ tbdown immediate sudo sysctl -w kernel.sem="10000 328 10000 164" [tibero@tibero path]$ tbboot Change core dump dir to /home/tibero/tibero7/bin/prof. Listener port = 8629 Tibero 7 TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. Tibero instance started up (NORMAL mode).
SEMMNS 최솟값 -1으로 기동 테스트
[tibero@tibero path]$ tbdown immediate sudo sysctl -w kernel.sem="10000 327 10000 164" [tibero@tibero path]$ tbboot Change core dump dir to /home/tibero/tibero7/bin/prof. semget failed.: No space left on device *************************************************************************** * Cannot get semaphore: * key = 0x8aa81734, errno=28 *************************************************************************** Tibero instance startup failed!
SEMMNI 최솟값 -1으로 기동 테스트
[tibero@tibero path]$ tbdown immediate sudo sysctl -w kernel.sem="10000 328 10000 163" [tibero@tibero path]$ tbboot Change core dump dir to /home/tibero/tibero7/bin/prof. semget failed.: No space left on device *************************************************************************** * Cannot get semaphore: * key = 0x8aa81734, errno=28 *************************************************************************** Tibero instance startup failed!
1만 부족한 경우에도 기동되지 않음을 확인할 수 있습니다.
2.2 kernel.shmmax 공유 세그먼트 최대 사용량 테스트
shmmax 값을 TSM과 동일한 2147483648 값으로 설정합니다.
설정 파일 수정
vi /etc/sysctl.conf
shmmax 값 변경
sudo sysctl -w kernel.shmmax="2147483648"
Tibero 기동 성공 확인
[tibero@tibero ~]$ tbboot Change core dump dir to /home/tibero/tibero7/bin/prof. Listener port = 8629 Tibero 7 TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. Tibero instance started up (NORMAL mode). 기동 성공
shmmax 값의 1을 뺀 값으로 설정
sudo sysctl -w kernel.shmmax="2147483647"
Tibero 기동 실패 확인
[tibero@tibero ~] $ tbboot *************************************************************************** * Cannot get shared memory segment: Check TOTAL_SHM_SIZE and OS PARAMETER * SHM_KEY = 0x3f8d32dc, size = 2147483648, SHMMAX = 2147483647 * * Please adjust kernel parameters and retry. * Linux: sysctl kernel.shmmax * sysctl -w kernel.shmmax=2147483648 ***************************************************************************
Tibero 기동 시 TSM만큼의 segment가 할당되기 때문에 1 byte 부족하여 기동 실패합니다.
shmmax 값은 최대로 사용할 공유 세그먼트의 크기를 고려하여 TSM ≤= shmmax로 설정이 필요합니다.
2.3 kernel.shmall 공유 세그먼트 최대 사용량 테스트
Kernel.shmall는 Linux 시스템에서 할당할 수 있는 전체 공유 메모리 페이지 수를 설정하는 파라미터입니다.
즉 , kernel.shmall * PAGE_SIZE = 시스템에서 할당할 수 있는 전체 공유 메모리 크기입니다.
설정 파일 수정
vi /etc/sysctl.conf
shmmall 값 변경
shmall 값을 2147483648(Tibero 공유 메모리 size) / 4096(PAGE_SIZE)로 변경 sudo sysctl -w kernel.shmall="524288"
Tibero 기동 성공 확인
[tibero@tibero ~]$ tbboot Change core dump dir to /home/tibero/tibero7/bin/prof. Listener port = 8629 Tibero 7 TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. Tibero instance started up (NORMAL mode). 기동 성공
shmall 값의 1을 뺀 값으로 설정
sudo sysctl -w kernel.shmall="524287"
Tibero 기동 실패 확인
[tibero@tibero ~] $ tbboot shmget failed.: No space left on device *************************************************************************** * Cannot get shared memory segment: * SHM_KEY = 0x3f8d32dc, size = 2147483648, errno=28 (No space left on device) *************************************************************************** 오류와 함께 기동이 되지 않는다.
주의
Kernel.shmall의 경우 시스템에서 할당할 수 있는 전체 공유 메모리 페이지 수를 설정하는 파라미터이기 때문에 , 서버에서 이미 사용중인 공유메모리가 있다면 해당 값을 고려하여 설정해야 함.
Kernel.shmall 주의사항 예시
### 현재 사용중인 공유 메모리 확인 [tibero@tibero ~]$ ipcs -m ---------------- Shared Memory Segments ------------------------ key shmid owner perms bytes nattch status 0x6e948184 49 others 640 1073741824 12 이러한 경우, Tibero가 기동되기 위해선 Kernel.shmall의 값이 (Tibero 공유 메모리 크기 + 사용중 공유 메모리 크기) / PAGE_SIZE 값 이상으로 설정되어야 함.
2.4 kernel.shmmni 공유 세그먼트 갯수 제한 테스트
사용중인 segment 갯수 확인
[tibero@tibero ~]$ ipcs -m ---------------- Shared Memory Segments ------------------------ key shmid owner perms bytes nattch status 0x6e948184 49 others 640 1073741824 12
kernel.shmmni 값 1로 변경 후 기동
sudo sysctl -w kernel.shmmni="1" [tibero@tibero ~] $ tbboot shmget failed.: No space left on device *************************************************************************** * Cannot get shared memory segment: * SHM_KEY = 0x3f8d32dc, size = 2147483648, errno=28 (No space left on device) *************************************************************************** 이미 한 개의 공유 세그먼트가 점유하고 있어서 기동에 실패
kernel.shmmni 값 2로 변경 후 기동
sudo sysctl -w kernel.shmmni="2" [tibero@tibero ~]$ tbboot Change core dump dir to /home/tibero/tibero7/bin/prof. Listener port = 8629 Tibero 7 TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. Tibero instance started up (NORMAL mode). 기동 성공
사용 중인 segment 개수 확인
[tibero@tibero ~]$ ipcs -m ---------------- Shared Memory Segments ------------------------ key shmid owner perms bytes nattch status 0x6e948184 49 others 640 1073741824 12 0x3f8d32dc 52 tibero 640 2147483648 12
kernel.shmmni 값은 사용 중인 세그먼트 개수와 Tibero 기동에 필요한 세그먼트 개수를 고려하여 설정해야 함을 확인할 수 있습니다.