개요
이 문서는 Linux 시스템에서 Altibase를 안정적으로 운영하기 위한 커널 파라미터 및 OS 사용자 환경설정에 대한 가이드를 제시한다.
이 문서는 아래 버전을 기준으로 작성되었다.
- Altibase v5.5.1 이상
- Red Hat Enterprise Linux 6 이상
Linux 호환성
Linux는 수많은 배포판이 존재하나 Altibase와의 호환성 확인은 배포판 종류 및 커널 버전에 상관없이 glibc 버전을 기준으로 한다.
glibc 호환성 버전
- Altibase v5.5.1 부터 glibc 버전을 기준으로 호환성 여부를 확인한다.
Altibase 버전 별 호환성이 보장된 glibc 버전은 아래와 같다.
Altibase 버전 glibc 버전 Altibase v7.1.0 2.12 ~ 2.20 Altibase v6.5.1 2.12 ~ 2.20 Altibase v6.3.1 2.3.4 ~ 2.20 Altibase v6.1.1 2.3.4 ~ 2.20 Altibase v5.5.1 2.3.4 ~ 2.20
glibc 권고 버전
- glibc-2.12-1.166.el6_7.1 이상을 권고한다.
- 이전 버전의 glibc는 시스템 콜(malloc/free) 함수가 race condition으로 인해 deadlock이 발생할수 있는 버그가 존재한다.
glibc 버전 확인 방법
glibc 버전 확인 방법은 다음과 같다.
커널 파라미터
Linux에서 Altibase를 설치하고 안정적으로 운영하기 위해 설정해야 할 커널 파라미터의 종류와 권고값, 권고 이유에 관해 설명한다.
설정 권고 파라미터 종류는 다음과 같다.
- CPU frequency Governor
- RemoveIPC
- swappiness
- THP
- max_map_count
- 공유 메모리
- 세마포어
CPU frequency Governor
Altibase는 최대 처리 성능과 최단 응답시간을 절대적으로 요구하는 시스템이므로 CPU 클럭 속도를 항상 최고로 유지해야 한다.
Linux는 그린 IT(환경친화적인 컴퓨팅)에 발맞춰 시스템의 전력 소모를 효율적으로 최소화하는 것이 전원 관리의 핵심으로 보고 이를 위해 CPUfreq Governor를 제공한다.
RHEL 6의 기본 설정 Ondemand Governor는 주파수 변경에 따른 지연 시간으로 Altibase 성능이 일관성을 보장하지 못한 사례가 있다. 따라서 performance로 설정하거나 이 기능 자체를 비활성화하는 것을 권고한다.
커널 파라미터 | 설명 | 권고값 |
---|---|---|
CPU frequency Governor | Linux에서 전원 관리를 위해 CPU 주파수 변경 규칙 등을 조정하는 성능 조정기이다. | performance |
Linux 커널 버전
- CPUfreq Governor는 Red Hat Enterprise Linux 6 부터 지원하는 기능이다.
- RHEL 6의 커널 버전은 2.6.32-71 이다.
- Red Hat Enterprise Linux Release Dates
RemoveIPC
RemoveIPC는 RHEL 7.2에서 추가된 옵션으로 OS 사용자가 세션을 종료할 때 System V IPC와 POSIX IPC 객체를 제거하는 리눅스 프로퍼티이다.
기본 설정 yes의 경우 IPC를 사용하는 Altibase 환경에서 강제적인 세마포어 할당, 반환으로 Altibase 및 애플리케이션 비정상 종료 현상이 발생한 사례가 보고되었다. IPC를 사용하지 않는 환경에서도 커널에서 발생하는 RemoveIPC 관련 동작 및 시스템 콜로 인해 시스템 성능에 영향을 주는 사례도 보고되었으므로 기본적으로 no를 권고한다.
커널 파라미터 | 설명 | 권고값 |
---|---|---|
RemoveIPC | OS 사용자가 로그아웃할 때 IPC 자원을 모두 제거한다. | no |
Linux 커널 버전
- RemoveIPC는 Red Hat Enterprise Linux 7.2에서 추가된 옵션이다.
- RHEL 7.2의 커널 버전은 3.10.0-327 이다.
- Red Hat Enterprise Linux Release Dates
swappiness
스와핑(swapping) 발생 시 디스크 I/O로 인한 시스템 성능 저하가 Altibase 성능에 영향을 미치는 것을 최소화하기 위해 권장하는 커널 파라미터이다.
스와핑이란 물리 메모리가 부족한 상황에서 사용 빈도가 낮은 물리 메모리 영역을 스왑 영역로 내리는 작업(스왑 아웃, swap out)을 의미한다. 스왑은 디스크를 메모리처럼 사용하기 위한 것으로 스왑 아웃이 발생하면 DISK I/O로 인한 시스템 성능 저하가 발생한다.
따라서 Altibase의 안정적이고 일관적인 성능을 유지하기 위해 swappiness를 적절하게 설정하는 것이 중요하다.
커널 파라미터 | 설명 | 권고값 |
---|---|---|
swappiness | 0 ~ 100 사이에서 설정할 수 있다. | 1 |
- swappiness를 완전히 비활성화하면 메모리 부족 상황에서 Altibase 프로세스가 OOM Killer에 의해 비정상 종료할 가능성이 커진다.
- 권고값 1은 swappiness를 비활성화하지 않고 스와핑을 최소화하기 위한 설정이다.
- 페이지 캐시는 파일 I/O 성능 향상을 위해 Linux에서 관리하는 메모리 영역이다.
Linux 커널 버전
- swappiness는 커널 버전 상관없이 모두 적용한다.
THP(Transparent Huge Pages)
THP는 대량의 메모리 관리를 위해 Linux에서 채택한 방법으로 4096바이트 단위의 메모리 페이지를 2MB 또는 1GB 단위로 확대하는 기능을 자동화하는 설정이다.
하지만 Altibase 운용 환경에서 메모리 할당 지연 및 단편화로 인한 성능 이슈 사례가 보고되어 비활성화를 권고한다.
커널 파라미터 | 설명 | 권고값 |
---|---|---|
THP(transparent_hugepage) | 커널에서 관리하는 메모리 페이지 단위를 기존 4K에서 2M 또는 1G단위로 확대하는 기능을 자동화한다. | never |
Linux 커널 버전
- THP(Transparent Huge Pages)는 Red Hat Enterprise Linux 6 부터 지원하는 기능이다.
- RHEL 6의 커널 버전은 2.6.32-71 이다.
- Red Hat Enterprise Linux Release Dates
max_map_count
테라바이트 단위의 메모리 테이블을 운영할 경우 max_map_count 파라미터 제한으로 메모리 할당 실패할 수 있다. 이는 트랜잭션 실패 등 Altibase 운용에 심각한 영향을 줄 수 있으므로 충분히 큰 값으로 설정하는 것을 권고한다.
커널 파라미터 | 설명 | 권고값 |
---|---|---|
max_map_count | 프로세스가 사용할 수 있는 메모리 맵 영역의 최대 수를 의미한다. | 2147483647 |
- 이 파라미터 제한으로 메모리 할당이 실패할 경우,
- Altibase 트레이스 로그 altibase_boot.log에 아래와 같은 메시지가 남을 수 있다.
- Failed to mmap log file ( errno=ENOMEM(12), Not enough memory
- 어플리케이션에서는 Memory [iduMemMgr::malloc] failed. 와 같은 에러가 발생할 수 있다.
- Altibase 트레이스 로그 altibase_boot.log에 아래와 같은 메시지가 남을 수 있다.
공유 메모리(Shared memory)
한 서버에서 여러 응용 프로그램이 서로 정보를 주고받아야 하는 경우 필요한 커널 파라미터이다.
- Altibase와 클라이언트의 통신 방식이 IPC 또는 IPCDA 타입인 경우
- 두 개 이상의 Altibase 응용 프로그램이 IPC로 통신하는 경우
OS는 이를 위해 IPC(Inter Process Communication)라고 부르는 자원을 제공한다. 여러 IPC 자원 중 프로세스 간 정보를 주고 받기 위한 메모리 영역을 공유 메모리(Shared memory)라고 부른다. 공유 메모리는 사용자가 단위를 지정하여 한 개 이상의 영역으로 나누어 설정할 수 있으며 이를 세그먼트(segment)라고 부른다.
예를 들어 사용자는 10MB로 1개의 세그먼트를 갖는 공유 메모리를 설정할 수도 있고 10MB로 10개의 세그먼트로 구성하여 100MB의 공유 메모리를 설정할 수도 있다. 따라서, 세그먼트의 최대 크기나 개수와 같은 세그먼트 관련한 커널 파라미터 설정이 필요하다.
Linux에서 제공하는 공유 메모리 관련 파라미터와 Altibase에서 권장하는 값은 아래와 같다.
커널 파라미터 | 설명 | 권고값 |
---|---|---|
shmmni | 생성할 수 있는 공유 메모리 세그먼트의 최대 개수로 기본값은 4096이다. | 4096 |
shmmax | 공유 메모리 세그먼트 한 개의 최대 크기로 단위는 바이트이다. | 2147483648 |
세마포어(Semaphore)
Altibase와 클라이언트의 통신 방식이 IPC 또는 IPCDA 타입인 경우 프로세스 간 동기화 구현하기 위해 필요한 커널 파라미터이다.
세마포어는 IPC에서 공유 자원에 대한 접근을 제한하기 위해 OS에서 제공하는 자원이다. IPC 또는 IPCDA 통신 방식에서 공유 메모리를 통신 버퍼로 사용하기 때문에 이 자원에 대한 읽기/쓰기의 동시성 제어를 위해 세마포어 오퍼레이션을 사용한다. 세마포어 오퍼레이션에 따라 프로세스는 대기 또는 진행 상태가 될 수 있다. 세마포어 오퍼레이션은 동시다발적으로 발생하기 때문에 세마포어 개수 및 오퍼레이션에 대한 적합한 커널 파라미터 설정이 필요하다.
Linux에서 제공하는 세마포어 관련 파라미터와 Altibase에서 권장하는 값은 아래와 같다.
커널 파라미터 | 설명 | 권고값 |
---|---|---|
semmsl | 한 개의 세마포어 세트에 존재하는 세마포어의 최대개수이며 논리적으로 semmns와 같거나 작아야 한다. | 2000 |
semmns | 운영체제에서 세마포어의 최대 개수이며 한 개에 16바이트의 커널 메모리가 할당된다. | 32000 |
semopm | semop 시스템 콜에서 처리하는 오퍼레이션의 최대 개수이다. | 512 |
semmni | 세마포어 세트의 최대 개수로 65535 이내에 설정 가능하며 한 세트당 84바이트의 커널 메모리가 할당된다. | 5029 |
커널 파라미터 변경 방법
각 커널 파라미터의 설정값을 확인하는 방법과 변경 방법을 알아본다.
CPU frequency Governor
Altibase에서 권고하는 CPU frequency Governor 설정은 performance이다.
설정값 확인
RHEL 6과 7에서 공통으로 사용하는 확인 방법이다. 일반적으로 cat 명령어로 확인하며 cpupowerutils 패키지가 설치되어 있다면 cpupower 명령어로도 확인할 수 있다.
cat 명령어
RHEL 6과 7에서 공통으로 사용하는 확인 방법이다.
CPU frequency Governor 설정 확인 방법 및 출력 예시- catcpupower 명령어
CPU frequency Governor 설정 확인 방법 - cpupowerCPU 코어 별 클럭 속도 확인
아래 명령어로 모든 CPU 코어의 클럭 속도가 일정하게 설정되어 있는지 확인한다.
설정값 변경 방법
Red Hat Enterprise Linux 6
Red Hat Enterprise Linux 6에서 CPU frequency Governor를 변경하는 방법이다.
1) 즉시 변경
governor 지시문과 cpupower 명령어를 이용한 설정은 온라인 상태에서 변경할 수 있으나 OS를 재시작하면 초기화된다.
cat 명령어를 이용한 governor 지시문
RHEL 6에서 CPUfreq Governor 즉시 변경 1 - cat 명령어cpupower
RHEL 6에서 CPUfreq Governor 즉시 변경 2 - cpupower 명령어tuned
tuned 시스템 도구가 활성화된 시스템의 경우 [RHEL 7 CPUfreq Governor 영구 적용 - tuned] 부분을 참고한다.
2) 영구 적용
OS를 재시작 후에도 설정값을 유지하기 위한 방법이다.
tuned
[RHEL 7 CPUfreq Governor 영구 적용 - tuned] 부분을 참고한다.
rc.local
tuned 서비스가 비활성화인 경우 사용한다.RHEL 6 CPUfreq Governor 설정 영구 적용 방법 2 - rc.local
Red Hat Enterprise Linux 7
Red Hat Enterprise Linux 7에서 CPU freqency Governor를 변경하는 방법이다.
1) 즉시 변경
cpupower
cpupower 명령어를 이용한 설정 변경은 OS를 재시작하면 초기화된다.RHEL 7 CPUfreq Governor 설정 즉시 적용 - cpupower
2) 영구 적용
tuned
Linux에서 기본 제공하는 throughput-performance나 latency-performance 프로파일을 사용한다. 이 두 프로파일을 사용하면 아래와 같은 효과를 볼 수 있다.
CPUfreq governor가 performance로 설정된다.
CPU 클럭 속도가 최대로 고정된다.
참고로, Red Hat Enterprise Linux 7의 기본 프로파일은 throughput-performance 이다.
throughput-performance나 latency-performance 프로파일로 설정하는 방법은 두 가지이다.
첫 번째 방법 : active 프로파일에 throughput-performance profile을 include한다.
RHEL 7 CPUfreq Governor 영구 적용 - active tuned profile에 throughput-performance profile을 include하는 방법
두 번째 방법 : active 프로파일을 throughput-performance로 변경한다.RHEL 7 CPUfreq Governor 영구 적용 - active profile을 throughput-performance로 변경하는 예시
RemoveIPC
RemoveIPC는 Red Hat Enterprise Linux 7.2 이상 버전에서 적용하며 권고값은 no이다.
설정값 확인
logind.conf 파일에서 RemoveIPC=no 로 설정되어 있는 지 확인한다.
RemoveIPC 설정값 확인
설정값 변경 방법
Red Hat Enterprise Linux 7
1) 즉시 변경
- RemoveIPC는 Linux에서 즉시 변경하는 방법을 제공하지 않는다.
2) 영구 적용
/etc/systemd/logind.conf 파일을 편집기로 열고 RemoveIPC=no 로 변경한다.
RemoveIPC 변경 방법OS를 재시작하거나 다음 명령을 수행하여 변경 사항을 적용한다.
RemoveIPC 변경 후 적용
swappiness
현재 설정값을 확인하여 권고설정이 안되어 있는 경우 아래 가이드를 참고하여 변경한다.
설정값 확인
설정값 확인은 Linux 버전 상관없이 동일하다. 다음 두 가지 방법으로 확인할 수 있다.
cat 이용
swappiness 설정 확인 방법 1 - catsysctl 이용
swappiness 설정 확인 방법 2 - sysctl
설정값 변경 방법
Red Hat Enterprise Linux 6
Red Hat Enterprise Linux 6에서 swappiness를 변경하는 방법이다.
1) 즉시 변경
echo 또는 sysctl 명령어를 이용한다.
RHEL 6 swappiness 즉시 변경 방법 1 - echoRHEL 6 swappiness 즉시 변경 방법 2 - sysctl
2) 영구 적용
sysctl.conf, rc.local 두 가지 방법으로 설정할 수 있으므로 모두 동일하게 적용한다.
sysctl.conf
RHEL 6 swappiness 영구 적용 방법 1 - sysctlrc.local
RHEL 6 swappiness 영구 적용 방법 2 - rc.local
Red Hat Enterprise Linux 7
Red Hat Enterprise Linux 7에서 swappiness를 변경하는 방법이다.
1) 즉시 변경
echo 또는 sysctl 명령어를 이용한다.
RHEL 7 swappiness 즉시 변경 방법 1 - echoRHEL 7 swappiness 즉시 변경 방법 2 - sysctl
2) 영구 적용
tuned profile과 sysctl.conf 두 가지 방법으로 설정할 수 있으므로 모두 동일하게 적용한다.
tuned
RHEL 7 swappiness 영구 적용 방법 - tuned/etc/sysctl.conf
RHEL 7 swappiness 영구 적용 방법 - sysctl.conf변경사항을 확인하기 위해 OS를 재시작한다. OS 재시작은 모든 커널 파라미터 변경 후 한번에 수행해도 된다.
THP
현재 설정값을 확인하여 권고설정이 안되어 있는 경우 아래 가이드를 참고하여 변경한다.
설정값 확인
설정 확인 방법은 Linux 버전 상관없이 동일하다.
THP 설정 확인 방법 3가지
설정값 변경 방법
Red Hat Enterprise Linux 6
Red Hat Enterprise Linux 6에서 THP 설정을 비활성화하는 방법이다.
1) 즉시 변경
아래 명령어는 새로운 THP 생성 및 사용만 중지한다. 이전에 생성된 THP가 해제되지는 않으므로 완전히 없애기 위해서는 THP를 비활성화한 상태에서 OS 재시작을 해야한다.
RHEL 6 THP 즉시 변경 방법
2) 영구 적용
grub.conf 파일과 rc.local 파일에 모두 동일하게 적용한다.
/etc/grub.conf
grub.conf 파일에 transparent_hugepage=never 설정을 추가한다.RHEL 6 THP 영구 적용 방법 - /etc/grub.conf
/etc/rc.d/rc.local
rc.local 파일에 아래와 같이 추가한다.RHEL 6 THP 영구 적용 방법 - /etc/rc.d/rc.localOS를 재시작하여 설정 상태를 확인한다. OS 재시작은 모든 커널 파라미터 변경 후 한번에 수행해도 된다.
Red Hat Enterprise Linux 7
1) 즉시 변경
- RHEL 7 에서는 OS 구동 상태에서 THP 설정을 변경할 수 없다.
2) 영구 적용
Red Hat Enterprise Linux 7의 경우 grub, tuned 설정으로 활성화할 수 있으므로 모든 설정에서 비활성화한다.
grub
1. /etc/default/grub 파일에 GRUB_CMDLINE_LINUX 항목에 transparent_hugepage=never를 추가한다.
RHEL 7 THP 영구 적용 - grub2. grub2-mkconfig를 수행하여 grub.cfg 파일을 생성한다.
펌웨어 타입에 따라 grub.cfg 파일 생성 위치가 다르므로 다음 명령어를 참고하여 수행한다.
On BIOS-based machines
RHEL 7 - BIOS - grub.cfg 생성On UEFI-based machines
RHEL 7 - UEFI - grub.cfg 생성tuned
tuned 서비스가 활성화되어 있다면 tuned profile에도 THP 비활성화를 설정한다.
참고로 Red Hat Enterprise Linux 7의 기본 tuned profile은 throughput-performance이고 THP 활성화가 기본 설정이다.
아래는 active tuned profile에서 THP를 비활성화하는 방법이다.
RHEL 7 THP 영구 적용 - tuned
새로운 tuned profile을 등록하는 방법도 있다.
https://www.thegeekdiary.com/centos-rhel-7-how-to-disable-transparent-huge-pages-thp/변경사항을 확인하기 위해 OS를 재시작한다. OS 재시작은 모든 커널 파라미터 변경 후 한번에 수행해도 된다.
max_map_count
현재 설정값을 확인하여 권고설정이 안되어 있는 경우 아래 가이드를 참고하여 변경한다.
설정값 확인
설정값 확인은 Linux 버전 상관없이 동일하다. 다음 두 가지 방법으로 확인할 수 있다.
cat 이용
max_map_count 설정 확인 방법 1 - catsysctl 이용
max_map_count 설정 확인 방법 2 - sysctl
설정값 변경 방법
Red Hat Enterprise Linux 6
Red Hat Enterprise Linux 6에서 max_map_count 파라미터 설정값을 변경하는 방법이다.
1) 즉시 변경
sysctl 명령어를 이용한다.
RHEL 6 max_map_count 즉시 변경 방법 - sysctl
2) 영구 적용
sysctl.conf, rc.local 두 가지 방법으로 설정할 수 있으므로 모두 동일하게 적용한다.
sysctl.conf
RHEL 6 max_map_count 영구 적용 방법 1 - sysctlrc.local
RHEL 6 max_map_count 영구 적용 방법 2 - rc.local
Red Hat Enterprise Linux 7
Red Hat Enterprise Linux 7에서 max_map_count 를 변경하는 방법이다.
1) 즉시 변경
sysctl 명령어를 이용한다.
RHEL 7 max_map_count 즉시 변경 방법 - sysctl
2) 영구 적용
tuned profile과 sysctl.conf 두 가지 방법으로 설정할 수 있으므로 모두 동일하게 적용한다.
tuned
RHEL 7 max_map_count 영구 적용 방법 - tuned/etc/sysctl.conf
RHEL 7 max_map_count 영구 적용 방법 - sysctl.conf변경사항을 확인하기 위해 OS를 재시작한다. OS 재시작은 모든 커널 파라미터 변경 후 한번에 수행해도 된다.
공유 메모리와 세마포어
설정값 확인
ipcs 명령어
공유 메모리 및 세마포어 확인방법 1 - ipcs 명령 이용sysctl 명령어
공유 메모리 및 세마포어 확인방법 2 - sysctl 명령 이용
설정값 변경 방법
1) 즉시 변경
echo 명령어를 이용한다
공유 메모리 및 세마포어 즉시 변경
2) 영구 적용
/etc/sysctl.conf 파일에 추가한다.
공유 메모리 및 세마포어 영구 적용 - /etc/sysctl.conf변경사항을 확인하기 위해 OS를 재시작한다. OS 재시작은 모든 커널 파라미터 변경 후 한번에 수행해도 된다.
사용자 환경
Linux에서 Altibase를 설치하고 운영하기 위해 필요한 사용자 환경 설정에 관한 설명이다. 사용자는 OS 사용자를 의미하며 Altibase를 설치하고 Altibase 프로세스를 구동하는 사용자이다.
배시 쉘(Bash Shell)에서 사용자 로그인 환경설정 파일은 .bash_profile이다. 사용자 환경설정 파일은 쉘에 따라 다르나 Linux 기본 쉘이 배시 쉘이므로 이를 기준으로 설명한다.
사용자 환경은 다음 두 가지로 나뉜다.
- 리소스 제한
- 환경 변수
리소스 제한
Linux는 CPU, 메모리, 파일 등과 같은 시스템 자원(리소스, resource)을 제한하는 설정을 제공한다. 특정 사용자가 시스템 자원을 독점하는 것을 막기 위한 목적이나 파일 생성 제한, 메모리 할당 제한 등으로 인해 운영에 치명적인 영향을 미치기 때문에 적절한 설정이 필요하다.
Altibase 운영 환경에서 권고하는 리소스 항목과 권고값은 아래와 같다.
리소스 종류 | 설명 | 권장값 | ||
---|---|---|---|---|
ulimit 명령어 | limits.conf의 item | |||
data seg size (kbytes, -d) | data | 프로세스 데이터 영역의 최대 메모리 크기 | unlimited | |
file size (blocks, -f) | fsize | 생성 가능한 파일의 최대 크기 | unlimited | |
open files (-n) | nofile | 한 프로세스에서 열 수 있는 최대 open file descriptor 수 | 1048576 | |
max memory size (kbytes, -m) | rss | 사용 가능한 메모리의 최대 크기 | unlimited | |
virtual memory (kbytes, -v) | as | 사용 가능한 가상 메모리의 최대 크기 | unlimited | |
max user processes (-u) | nproc | 사용자가 실행할 수 있는 프로세스(쓰레드 포함)의 최대 개수 | unlimited |
관련 에러 메시지
리소스 제한으로 발생하는 에러 메시지이다. Altibase 운영 중 아래의 에러 메시지가 확인되면 리소스 제한 설정을 확인할 필요가 있다.
- max user processes 가 부족한 경우
- Failed to create a thread object.
- resource temporarily unavailable
- open files 가 부족한 경우
- Too many open files
리소스 설정값 확인 및 변경
리소스 제한은 사용자 별로 설정하지만, 사용자 프로세스에 개별 적용된다.
변경한 리소스 제한 설정값을 Altibase에 반영하려면 Altibase를 재기동해야 한다.
설정값 확인 방법
리소스 제한 설정값을 확인하는 명령어이다.
프로세스에 설정된 리소스 제한값은 아래 명령어로 확인한다.
프로세스에 원하는 설정값이 적용되어 있지 않다면 를 재기동해야 한다.
설정값 변경 방법
ulimit 명령을 수행한다.
ulimit은 리소스 제한을 설정하는 명령어이다. Altibase를 설치하고 구동하는 OS 사용자의 환경설정 파일 .bash_profile에 ulimit 설정 명령어를 추가한다.
사용자 리소스 제한 설정 예제 - .bash_profile 에 추가환경설정 파일(.bash_profile)을 적용한다.
아래 명령어로 ulimit 설정을 적용한다.
환경설정 파일 적용 시 아래와 같은 에러가 발생할 수 있다.
이는 Hard-Limit에 걸려 발생하는 에러이다.
Hard-Limit & Soft-Limit
시스템 리소스 제한에는 Hard-Limit과 Soft-Limit이 있다. Hard-Limit은 OS 일반 사용자가 설정할 수 있는 최대 리소스 제한 설정값을 의미하고 Soft-Limit은 사용자에 설정된 리소스 제한값을 의미한다.
Hard-Limit이 사용자가 ulimit으로 설정하려는 값보다 작으면 cannot modify limit 에러가 발생한다.
Hard-Limit 확인 방법/etc/security/limits.conf 변경
Hard-Limit 변경은 root 권한이 필요하다. limits.conf 파일에 아래 설정을 추가한 후 저장한다.
Hard-Limit 설정 예제 - OS 사용자 이름이 altibase 인 경우해당 OS 유저로 로그인하여 2.단계를 다시 수행한다.
환경변수
Altibase 설치 후 설정해야 할 환경변수이다.
구분 | 환경변수 | 설명 | 설정값 | |
---|---|---|---|---|
필수 | 자동 설정 | ALTIBASE_HOME | Altibase를 설치한 경로를 지정한다. | 환경에 따라 다르다. |
PATH | Altibase의 유틸리티 및 쉘 스크립트의 위치를 찾기 위한 환경변수이다. | $ALTIBASE_HOME/bin | ||
LD_LIBRARY_PATH | Altibase 동적 라이브러리의 위치를 찾기 위한 환경변수이다. | $ALTIBASE_HOME/lib | ||
CLASSPATH | Java Class 파일의 위치를 찾기 위한 환경변수이다. | $ALTIBASE_HOME/lib | ||
수동 설정 | ALTIBASE_NLS_USE | Altibase 클라이언트 캐릭터셋 설정을 위한 환경변수이다. 캐릭터셋과 동일하게 설정한다. | 캐릭터셋과 동일 | |
LANG | 사용자의 시스템 로케일을 정의한다. | 캐릭터셋에 영향을 받는다. | ||
선택 | 수동 설정 | MALLOC_ARENA_MAX |
| - |
- 환경변수 MALLOC_ARENA_MAX
- 이 환경변수는 선택사항이다.
- 일반적으로 기본값을 유지하고 메모리 이슈가 발견될 경우 기본값보다 작게 설정하는 것을 고려한다.
- 이 환경변수는 설정값에 따라 프로세스의 성능과 메모리 사용량에 영향을 미치기 때문에 동일한 값을 일괄적으로 권고하기 어렵다.
- 이 환경변수의 기본값은 CPU 코어 수에 영향을 받아 CPU 코어 수가 많을수록 프로세스의 VSZ이 과도하게 커지는 현상이 발생할 수 있다.
환경변수 설정 방법
설정값 확인 방법
필수 환경변수가 올바르게 설정되어 있는지 확인한다.
env 명령어
env 결과는 해당 세션에 설정된 모든 환경변수를 출력한다.
echo 명령어
지정한 환경변수 설정값을 출력한다. 값을 출력하지 않으면 환경변수가 설정되어 있지 않은 것을 의미한다.
설정값 변경 방법
필수 환경변수 중 수동으로 설정해야 하는 ALTIBASE_NLS_USE, LANG 환경변수를 설정하는 방법이다.
Altibase 캐릭터셋을 확인한다.
.bash_profile 파일에 환경변수를 설정한다.
환경변수는 OS 사용자 세션 단위로 설정된다. 따라서 OS 사용자가 접속할 때마다 적용하기 위해 사용자 환경설정 파일 .bash_profile에 추가해야 한다.
아래 표는 Altibase 캐릭터셋에 따른 ALTIBASE_NLS_USE, LANG 환경변수 설정값을 보여준다.
Altibase 캐릭터셋 ALTIBASE_NLS_USE LANG MS949 MS949 ko_KR.euckr KO16KSC5601 KO16KSC5601 ko_KR.euckr UTF8 UTF8 ko_KR.utf8 위 표를 참고하여 사용자 환경설정 파일 .bash_profile에 환경변수를 추가한다.
환경변수 설정 예제 - .bash_profile 에 추가환경설정 파일(.bash_profile)을 적용한다.
아래 명령어로 추가한 환경변수를 적용한다.
요약
앞에서 소개한 커널 파라미터와 환경변수의 권고값을 확인하는 방법을 표로 정리하였다.
분류 | 권고설정 | 확인방법 | ||
---|---|---|---|---|
커널 파라미터 | CPU frequency Governor | performance | cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor | sort -u | |
CPU 코어의 클럭 속도가 최대로 고정 | grep MHz /proc/cpuinfo | sort -u | |||
RemoveIPC | no | grep RemoveIPC /etc/systemd/logind.conf | ||
swappiness | 1 | cat /proc/sys/vm/swappiness 또는 | ||
THP | never | cat /sys/kernel/mm/transparent_hugepage/enabled | ||
Hugepagesize 외에 모두 0 | grep -i huge /proc/meminfo | |||
transparent_hugepage=never 포함 | cat /proc/cmdline | |||
max_map_count | 2147483647 | cat /proc/sys/vm/max_map_count | ||
공유 메모리 | shmmni | 4096 | ipcs -m -l sysctl -a | grep -e kernel.shmmax -e kernel.shmmni | |
shmmax | 2147483648 | |||
세마포어 | semmsl | 2000 | ipcs -s -l sysctl -a | grep kernel.sem | |
semmns | 32000 | |||
semopm | 512 | |||
semmni | 5029 | |||
OS 사용자 리소스 제한 | data seg size | (kbytes, -d) | unlimited | ulimit -a |
file size | (blocks, -f) | unlimited | ||
open files | (-n) | 1048576 | ||
max memory size | (kbytes, -m) | unlimited | ||
virtual memory | (kbytes, -v) | unlimited | ||
max user processes | (-u) | unlimited | ||
OS 사용자 환경변수 | ALTIBASE_HOME | Altibase 설치 경로(절대 경로) | env | |
PATH | $ALTIBASE_HOME/bin | |||
LD_LIBRARY_PATH | $ALTIBASE_HOME/lib | |||
CLASSPATH | $ALTIBASE_HOME/lib | |||
ALTIBASE_NLS_USE | Altibase 캐릭터셋과 동일 | |||
LANG | Altibase 캐릭터셋에 따름 |
기타
Red Hat Enterprise Linux 권장 Swap 크기
Red Hat Linux에서는 Swap 크기 설정에 대해 아래와 같이 권고하고 있다.
- 과거에는 물리 메모리의 2배의 Swap 공간을 권고했으나 테라바이트 급의 메모리를 가진 오늘날에는 과거 권고는 실용성이 없다.
- 140개 이상의 논리 프로세서를 가진 시스템 혹은 3TB 이상의 RAM을 가진 시스템은 최소 100GB의 Swap 공간을 권장한다.
구체적인 내용은 Red Hat CUSTOMER PORTAL 페이지에서 참고한다.
systemd에 Altibase startup 서비스 등록 시 timeout 설정에 의한 Altibase 프로세스 강제 종료 현상
RHEL 7 이상이나 systemd 를 채택하는 Linux 배포판에 해당하는 주의사항입니다.
systemd 서비스 설정 파일에 timeout 설정이 있다면 OS 부팅 과정에서 Altibase 프로세스 구동 중 OS에 의해 Altibase 프로세스가 강제 종료되는 현상이 있을 수 있습니다.
- TimeoutStartSec 또는 TimeoutSec
이 경우 시스템 로그(messages)에 아래와 같은 메시지가 남습니다.
Jun 3 07:25:26 r-sky-ex altibase: [SM] Recovery Phase - 2 : Loading Database
Jun 3 07:26:53 r-sky-ex systemd: altibase.service start operation timed out. Terminating.
Jun 3 07:26:53 r-sky-ex systemd: Failed to start altibase 7.1.
Jun 3 07:26:53 r-sky-ex systemd: Unit altibase.service entered failed state.
Jun 3 07:26:53 r-sky-ex systemd: altibase.service failed.
Altibase 프로세스 구동 소요 시간은 상황에 따라 장시간 소요될 수 있습니다.
- 메모리 데이터 및 메모리 인덱스가 크거나
- Altibase 구동 중에 Restart Recovery 가 진행되는 경우
TimeoutStartSec 또는 TimeoutSec 설정값 운영 환경에 맞게 여유있게 설정하거나 0 (timeout 비활성화)으로 설정하여야 합니다.
이와 유사하게 TimeoutStopSec 설정이 있습니다.
보다 자세한 사항은 man systemd.service 을 참고하시기 바랍니다.
Symantec Endpoint Protection(SEP) for Linux 가 설치된 서버에서 SYS 영역 CPU 사용량 증가 현상
Symantec Endpoint Protection 프로세스에 의해 Altibase 프로세스의 SYS 영역 CPU 사용량이 증가하는 현상이 발견되었습니다.
vtune 분석 결과 Altibase 세션 수가 증가할수록 시스템콜 select(), write() 에 의해 SYS 영역의 CPU 사용량이 크게 증가합니다.
Broadcom 사에서 원인 규명이 안 된 상황으로 백신 프로그램을 변경하여 조치한 사례가 있습니다. (2020.06.기준)
현상이 보고된 서버 환경은 아래와 같습니다.
- Red Hat Enterprise Linux 7
- Symantec Endpoint Protection(SEP) for Linux
참고자료
Linux 호환성
- Altibase 7.1 Korean manuals - Installation Guide#OS-Patch
- Bug 1244002 - NFS and Fuse mounts hang while running IO - Malloc/free deadlock
- Altibase HDB가 지원하는 플랫폼(OS)은?
CPU frequency Governor
- Red Hat Enterprise Linux - 6 - 전원 관리 가이드 - 3.2. CPUfreq 조정기 사용하기
- Red Hat Enterprise Linux - 6 - 전원 관리 가이드 - 2.5.2. Tuned-adm
- Red Hat Enterprise Linux - 6 - 성능 조정 가이드 - 7.2. 파일 시스템 성능 프로파일
- https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/6/html-single/power_management_guide/index#cpufreq_setup
- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/power_management_guide/index#cpufreq_drivers
- https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/6/html-single/power_management_guide/index
- RHEL7: How to get started with CPU governor.
RemoveIPC
- logind.conf(5) - Linux manual page - man7.org
- Daemons using IPC terminate unexpectedly after update to Red Hat Enterprise Linux 7.2
- Database Installation and Operation Fails if RemoveIPC=yes Is Configured for systemd-Oracle docs
- IBM® Db2® servers might crash when the RemoveIPC option for Red Hat Enterprise Linux Version 7.2 is set to yes.
swappiness
- Wikipedia-Paging#Swappiness
- Wikipedia-Page_cache
- Wikipedia-Talk:Swappiness
- Red Hat Enterprise Linux 권장 swap 크기는 어떻게 되나요?
- Red Hat Enterprise Linux 7 - 성능 조정 가이드 - 4.3. 설정 도구
THP
- Red Hat Enterprise Linux-Huge Pages 및 Transparent Huge Pages
- THP(Transparent Huge Page)때문에 System Hang
- How to use, monitor, and disable transparent hugepages in Red Hat Enterprise Linux 6 and 7?
- Disabling Transparent HugePages - Oracle Docs
- Transparent Huge Pages on Linux - SAP Help Portal
- Red Hat Enterprise Linux 6 で THP (transparent hugepages) を無効にしても反映されない
- Red Hat Enterprise Linux 7 で transparent hugepages (THP) を無効にする
- CentOS / RHEL 6 : How to disable Transparent Huge pages (THP)
- CentOS / RHEL 7 : How to disable Transparent Huge pages (THP)
max_map_count
- https://www.kernel.org/doc/Documentation/sysctl/vm.txt
- Red Hat Enterprise Linux 7 - Performance Tuning Guide - 7.5. Configuring System Memory Capacity
- Additional OS validations required for SAP Applications on RHEL 7.++
공유 메모리 및 세마포어
- IPCDA는 Altibase 7 버전부터 지원하는 통신방식이다.
- Altibase 7.1 Korean manuals - Administrator's Manual 2#12서버클라이언트-통신
- Altibase 7.1 Korean manuals - Installation Guide#OS별-커널-파라미터-설정
로케일(Locale)
MALLOC_ARENA_MAX
- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/6.0_release_notes/compiler
- https://www.ibm.com/developerworks/community/blogs/kevgrig/entry/linux_glibc_2_10_rhel_6_malloc_may_show_excessive_virtual_memory_usage?lang=en
- https://github.com/prestodb/presto/issues/8993