부록 A. 설치 전 확인 사항#
사용자 계정의 리소스 한계 값 확인#
OS 명령어인 ulimit으로 사용자 계정에 설정된 리소스 한계값을 확인 또는 변경할 수 있다.
File Size#
프로세스가 생성 가능한 파일의 최대 크기
Data segment size#
프로세스가 사용 가능한 논리적 메모리의 최대 크기(VSZ측면)
Max memory size#
프로세스가 사용 가능한 물리적 메모리의 최대 크기(RSS측면)
Open files (descriptor)#
프로세스가 동시에 접근 가능한 파일 및 소켓의 최대 개수
Stack size#
최대 스택 사이즈
Virtual memory#
프로세스가 사용 가능한 가상 메모리의 최대 크기
리눅스 시스템은 사용자 계정의 리소스 한계값들을 "unlimited"로 설정할 것을 권장한다. 이 때 core file size는 unlimited로 설정하지 않도록 한다. 만일 Altibase 서버가 비정상 종료하여 코어를 덤프할 경우 메모리 데이터베이스를 모두 core 파일로 저장하기 때문에 unlimited로 설정하면 디스크 부족이 발생할 수 있다. Altibase 클라이언트 제품은 Stack size가 최소 70KB 이상이어야 한다.
리눅스 커널 파라미터 설정#
설정 방법#
/proc/sys/kernel/ 경로에 sem, shmmax, shmmni 파일과 /proc/sys/vm/swappiness 파일에 설정값을 반영한다. RedHat 7.2 이상에서는 /etc/systemd/logind.conf에서 RemoveIPC 설정값이 'no'로 설정되어 있는지 확인한다.
권장 값#
| 분류 | 커널 항목 | 권장 값(bytes) |
| 공유 메모리 | shmmax | 2G+1 |
| shmmin | 500 | |
| shmseg | 200 | |
| 세마포어 | semmns | 8192 |
| semmni | 5029 | |
| semmsl | 2000 | |
| semmap | 5024 | |
| semmnu | 1024 | |
| semopm | 512 | |
| semume | 512 | |
| semvmx | 32767 |
단, 리눅스 커널 버전이 2.5 이상이 아닐 경우 IPC접속을 사용하는 세션이 갑자기 단절되는 현상이 발생할 수 있다.
서버 부팅 시 자동으로 커널 파라미터가 설정되게 하려면, /etc/rc.d/rc.local 파일 내에 아래의 항목을 추가하라.
echo 2147483648 > /proc/sys/kernel/shmmax
echo 4096 > /proc/sys/kernel/shmmni
echo 200 32000 512 5029 > /proc/sys/kernel/sem
echo 1 > /proc/sys/vm/swappiness
RemoveIPC 설정#
RedHat 7.2 이상의 버전에서는 RemoveIPC 설정값을 'no'로 설정하는 것을 권장한다(기본값은 'yes'). RemoveIPC가 'yes'로 설정되면 세마포어가 부족하여 비정상종료가 발생할 수 있기 때문이다.
설정값을 변경하려면 /etc/systemd/logind.conf에서 RemoveIPC=no로 설정한 후 OS를 재시작해야한다.
THP 설정 확인 및 비활성화 방법#
THP(Transparent Huge Pages)는 메모리 페이지의 크기를 증가시킴으로써, TLB(Translation Lookaside Buffer)를 조회하는 비용을 줄이기 위한 목적으로 리눅스에서 제공하는 메모리 관리 시스템이다. 하지만 원래 의도와 달리 메모리 할당 지연 및 단편화를 유발하여 오히려 시스템 성능이 저하되는 경우가 많다.
Altibase를 사용하기 위해 THP 옵션을 비활성화(never)로 해야 한다.
THP 설정 확인#
THP에서 설정할 수 있는 옵션은 always, madvise, never 3가지이다. [ ] 로 둘러싸인 것이 현재 적용된 옵션이다. 각각의 의미는 아래와 같다.
-
madvise: madvise() 함수를 통해 THP 사용을 명시적으로 요청한 프로세스에만 THP가 활성화되는 옵션이다.
-
always: 모든 프로세스에 항상 THP가 적용되게 된다.
-
never: madvise() 함수 요청과 관계없이 모든 프로세스에서 THP가 비활성화되는 것을 의미한다.
THP 설정 확인 방법은 아래와 같다.
-
아래 명령을 실행한다
$ cat /sys/kernel/mm/transparent_hugepage/enabled -
레드햇 리눅스에서는 아래 명령을 실행한다
$ cat /sys/kernel/mm/redhat_transparent_hugepage/enabled -
아래와 같은 결과가 화면에 출력된다.
$ [always] madvise never
THP 비활성화 방법#
Altibase의 운영을 위해서 THP 옵션을 never로 설정할 것을 권고한다.
-
root 계정으로 /etc/grub.conf의 kernel boot 라인 끝에 transparent_hugepage=never를 아래처럼 추가한다.
..... kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=067b9803-90ca-4875-a018-ff043adde1ed rd_NO_LUKS LANG=ko_KR.UTF-8 rd_NO_MD quiet rhgb crashkernel=128M KEYBOARDTYPE=pc KEYTABLE=us rd_NO_LVM rd_NO_DM transparent_hugepage=never ...... -
시스템을 재시작한다.
-
THP 옵션이 never 인지 확인한다.
디스크 구성 상태 확인#
Altibase의 디스크 I/O는 기본적으로 리두 로그 파일과 데이터 파일에서 발생한다. 디스크 I/O에 따른 성능 저하를 감소시키기 위해 물리적으로 분리된 디스크 영역에 리두 로그 파일과 데이터 파일이 분산되도록 구성할 것을 권장한다.
OS Patch#
Linux#
glibc에서 malloc/free 등이 race condition으로 인해 deadlock이 발생할수 있는 버그가 있어, 해당 버그가 반영된 패치 이상으로 패치해야 한다. 따라서, glibc-2.12-1.166.el6_7.1 이상으로 glibc 패치를 권고한다.