Skip to end of metadata
Go to start of metadata

 

 

개요


이 문서는 Linux 시스템에서 Altibase를 안정적으로 운영하기 위한 커널 파라미터 및 OS 사용자 환경설정에 대한 가이드를 제시한다.

이 문서는 아래 버전을 기준으로 작성되었다.

  • Altibase v5.5.1 이상
  • Red Hat Enterprise Linux 6 이상

 

 

Icon

이 문서와 관련된 오류 및 개선사항은 기술지원포털 또는 기술지원센터로 문의주시기 바랍니다.

Icon

이 문서는 정보 제공을 목적으로 제공되며, 사전에 예고 없이 변경될 수 있습니다. 이 문서는 오류가 있을 수 있으며, 상업적 또는 특정 목적에 부합하는 명시적, 묵시적인 책임이 일절 없습니다.

이 문서에 포함된 Altibase 제품의 특징이나 기능의 개발, 발표 등의 시기는 Altibase 재량입니다.

Altibase는 이 문서에 대하여 관련된 특허권, 상표권, 저작권 또는 기타 지적 재산권을 보유할 수 있습니다.

 

 

Linux 호환성


Linux는 수많은 배포판이 존재하나 Altibase와의 호환성 확인은 배포판 종류 및 커널 버전에 상관없이 glibc 버전을 기준으로 한다.

 

 

glibc 호환성 버전


  • Altibase v5.5.1 부터 glibc 버전을 기준으로 호환성 여부를 확인한다.
  • Altibase 버전 별 호환성이 보장된 glibc 버전은 아래와 같다.

    Altibase 버전glibc 버전
    Altibase v7.1.02.12 ~ 2.20
    Altibase v6.5.12.12 ~ 2.20
    Altibase v6.3.12.3.4 ~ 2.20
    Altibase v6.1.12.3.4 ~ 2.20
    Altibase v5.5.12.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
(CPUfreq Governor)

Linux에서 전원 관리를 위해 CPU 주파수 변경 규칙 등을 조정하는 성능 조정기이다.
RHEL 6의 기본값은 Ondemand로 시스템의 부하가 높을 때는 CPU가 최고 클럭 주파수로 동작하고, 시스템이 유휴상태 일 때는 최저 주파수로 동작한다.

performance

Linux 커널 버전

 

RemoveIPC


RemoveIPC는 RHEL 7.2에서 추가된 옵션으로 OS 사용자가 세션을 종료할 때 System V IPC와 POSIX IPC 객체를 제거하는 리눅스 프로퍼티이다.

기본 설정 yes의 경우 IPC를 사용하는 Altibase 환경에서 강제적인 세마포어 할당, 반환으로 Altibase 및 애플리케이션 비정상 종료 현상이 발생한 사례가 보고되었다. IPC를 사용하지 않는 환경에서도 커널에서 발생하는 RemoveIPC 관련 동작 및 시스템 콜로 인해 시스템 성능에 영향을 주는 사례도 보고되었으므로 기본적으로 no를 권고한다.

커널 파라미터설명권고값
RemoveIPC

OS 사용자가 로그아웃할 때 IPC 자원을 모두 제거한다. 
root 사용자와 시스템 사용자는 이 설정에 영향을 받지 않는다. 기본값은 yes이다.

no

Linux 커널 버전

 

swappiness


스와핑(swapping) 발생 시 디스크 I/O로 인한 시스템 성능 저하가 Altibase 성능에 영향을 미치는 것을 최소화하기 위해 권장하는 커널 파라미터이다.

스와핑이란 물리 메모리가 부족한 상황에서 사용 빈도가 낮은 물리 메모리 영역을 스왑 영역로 내리는 작업(스왑 아웃, swap out)을 의미한다. 스왑은 디스크를 메모리처럼 사용하기 위한 것으로 스왑 아웃이 발생하면 DISK I/O로 인한 시스템 성능 저하가 발생한다.

따라서 Altibase의 안정적이고 일관적인 성능을 유지하기 위해 swappiness를 적절하게 설정하는 것이 중요하다.

커널 파라미터설명권고값
swappiness

0 ~ 100 사이에서 설정할 수 있다.
낮은 값은 커널이 가급적 페이지 캐시의 페이지를 사용하며 높은 값은 물리 메모리에서 사용 빈도가 낮은(cold) 페이지를 스왑 아웃 하는 것을 선호한다.

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단위로 확대하는 기능을 자동화한다.
기본값은 always이다.

never

Linux 커널 버전

 

max_map_count


테라바이트 단위의 메모리 테이블을 운영할 경우 max_map_count 파라미터 제한으로 메모리 할당 실패할 수 있다. 이는 트랜잭션 실패 등 Altibase 운용에 심각한 영향을 줄 수 있으므로 충분히 큰 값으로 설정하는 것을 권고한다.

커널 파라미터설명권고값
max_map_count

프로세스가 사용할 수 있는 메모리 맵 영역의 최대 수를 의미한다.
대부분의 경우 기본값으로 65530이 적절하나 애플리케이션에 이 파일 보다 많은 수를 매핑해야 하는 경우 이 값을 늘려야한다.   

2147483647
  • 이 파라미터 제한으로 메모리 할당이 실패할 경우,
    • Altibase 트레이스 로그 altibase_boot.log에 아래와 같은 메시지가 남을 수 있다.
      • Failed to mmap log file ( errno=ENOMEM(12), Not enough memory 
    • 어플리케이션에서는 Memory [iduMemMgr::malloc] failed. 와 같은 에러가 발생할 수 있다.

 

공유 메모리(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

공유 메모리 세그먼트 한 개의 최대 크기로 단위는 바이트이다.
x86 시스템의 경우 최소 설정값은 268435456바이트(256MB)이고 64비트 시스템의 경우 2147483648바이트(2GB)이다.

2147483648

 

세마포어(Semaphore)


Altibase와 클라이언트의 통신 방식이 IPC 또는 IPCDA 타입인 경우 프로세스 간 동기화 구현하기 위해 필요한 커널 파라미터이다.

세마포어는 IPC에서 공유 자원에 대한 접근을 제한하기 위해 OS에서 제공하는 자원이다. IPC 또는 IPCDA 통신 방식에서 공유 메모리를 통신 버퍼로 사용하기 때문에 이 자원에 대한 읽기/쓰기의 동시성 제어를 위해 세마포어 오퍼레이션을 사용한다. 세마포어 오퍼레이션에 따라 프로세스는 대기 또는 진행 상태가 될 수 있다. 세마포어 오퍼레이션은 동시다발적으로 발생하기 때문에 세마포어 개수 및 오퍼레이션에 대한 적합한 커널 파라미터 설정이 필요하다.

Linux에서 제공하는 세마포어 관련 파라미터와 Altibase에서 권장하는 값은 아래와 같다.

커널 파라미터설명권고값
semmsl

한 개의 세마포어 세트에 존재하는 세마포어의 최대개수이며 논리적으로 semmns와 같거나 작아야 한다.
너무 크게 잡으면 몇 개의 세마포어 ID가 시스템 전체의 세마포어를 독점할 수 있다.

2000
semmns운영체제에서 세마포어의 최대 개수이며 한 개에 16바이트의 커널 메모리가 할당된다.32000
semopmsemop 시스템 콜에서 처리하는 오퍼레이션의 최대 개수이다.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 설정 확인 방법 및 출력 예시- cat
     CPUfreq governor 드라이버 설치 여부 확인 방법

    Red Hat Enterprise Linux 6

     

    Red Hat Enterprise Linux 7

  • cpupower 명령어

    CPU frequency Governor 설정 확인 방법 - cpupower
  • CPU 코어 별 클럭 속도 확인

    아래 명령어로 모든 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] 부분을 참고한다.

     tuned 시스템 도구 활성화 확인 방법
2) 영구 적용

OS를 재시작 후에도 설정값을 유지하기 위한 방법이다.

  • 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 - cat
  • sysctl 이용

    swappiness 설정 확인 방법 2 - sysctl

설정값 변경 방법


Red Hat Enterprise Linux 6

Red Hat Enterprise Linux 6에서 swappiness를 변경하는 방법이다.

1) 즉시 변경
  • echo 또는 sysctl 명령어를 이용한다.

    RHEL 6 swappiness 즉시 변경 방법 1 - echo
    RHEL 6 swappiness 즉시 변경 방법 2 - sysctl
2) 영구 적용

sysctl.conf, rc.local 두 가지 방법으로 설정할 수 있으므로 모두 동일하게 적용한다.

  • sysct.conf

    RHEL 6 swappiness 영구 적용 방법 1 - sysctl


  • rc.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 - echo
    RHEL 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.local
  • OS를 재시작하여 설정 상태를 확인한다. 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 영구 적용 - grub

    2. grub2-mkconfig를 수행하여 grub.cfg 파일을 생성한다.

    펌웨어 타입에 따라 grub.cfg 파일 생성 위치가 다르므로 다음 명령어를 참고하여 수행한다.

    On BIOS-based machines

    RHEL 7 - BIOS - grub.cfg 생성

    On UEFI-based machines

    RHEL 7 - UEFI - grub.cfg 생성
     UEFI 모드 확인 방법
  • 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 - cat
  • sysctl 이용

    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 두 가지 방법으로 설정할 수 있으므로 모두 동일하게 적용한다.

  • sysct.conf

    RHEL 6 max_map_count 영구 적용 방법 1 - sysctl


  • rc.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를 재기동해야 한다.

설정값 확인 방법


  • 리소스 제한 설정값을 확인하는 명령어이다.

  • 프로세스에 설정된 리소스 제한값은 아래 명령어로 확인한다.

  • 프로세스에 원하는 설정값이 적용되어 있지 않다면 를 재기동해야 한다.

설정값 변경 방법


  1. ulimit 명령을 수행한다.

    ulimit은 리소스 제한을 설정하는 명령어이다. Altibase를 설치하고 구동하는 OS 사용자의 환경설정 파일 .bash_profile에 ulimit 설정 명령어를 추가한다.

    사용자 리소스 제한 설정 예제 - .bash_profile 에 추가
  2. 환경설정 파일(.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_HOMEAltibase를 설치한 경로를 지정한다.환경에 따라 다르다.
PATHAltibase의 유틸리티 및 쉘 스크립트의 위치를 찾기 위한 환경변수이다.$ALTIBASE_HOME/bin
LD_LIBRARY_PATHAltibase 동적 라이브러리의 위치를 찾기 위한 환경변수이다.$ALTIBASE_HOME/lib
CLASSPATHJava Class 파일의 위치를 찾기 위한 환경변수이다.$ALTIBASE_HOME/lib
수동 설정ALTIBASE_NLS_USE

Altibase 클라이언트 캐릭터셋 설정을 위한 환경변수이다.

캐릭터셋과 동일하게 설정한다.

캐릭터셋과 동일
LANG사용자의 시스템 로케일을 정의한다.캐릭터셋에 영향을 받는다.
선택수동 설정MALLOC_ARENA_MAX
  • 멀티쓰레드 응용 프로그램 환경에서 쓰레드 간 메모리 경합으로 인한 성능 이슈를 개선하기 위해 Red Hat Enterprise Linux 6에서 추가된 기능이다.
  • 기본값은 CPU 코어 수 * MALLOC_ARENA_TEST 이다.
  • MALLOC_ARENA_TEST 환경변수 기본값
    • 32-bit 의 경우 2
    • 64-bit 의 경우 8
  • MALLOC_ARENA_MAX 환경변수는 glibc2.10 이상에서 올바르게 동작한다.
-
  • 환경변수 MALLOC_ARENA_MAX
    • 이 환경변수는 선택사항이다.
    • 일반적으로 기본값을 유지하고 메모리 이슈가 발견될 경우 기본값보다 작게 설정하는 것을 고려한다.
    • 이 환경변수는 설정값에 따라 프로세스의 성능과 메모리 사용량에 영향을 미치기 때문에 동일한 값을 일괄적으로 권고하기 어렵다.
    • 이 환경변수의 기본값은 CPU 코어 수에 영향을 받아 CPU 코어 수가 많을수록 프로세스의 VSZ이 과도하게 커지는 현상이 발생할 수 있다.

 

환경변수 설정 방법


설정값 확인 방법


필수 환경변수가 올바르게 설정되어 있는지 확인한다.

  • env 명령어

    env 결과는 해당 세션에 설정된 모든 환경변수를 출력한다.

  • echo 명령어

    지정한 환경변수 설정값을 출력한다. 값을 출력하지 않으면 환경변수가 설정되어 있지 않은 것을 의미한다.

설정값 변경 방법


필수 환경변수 중 수동으로 설정해야 하는 ALTIBASE_NLS_USE, LANG 환경변수를 설정하는 방법이다.

  1. Altibase 캐릭터셋을 확인한다.

  2. .bash_profile 파일에 환경변수를 설정한다. 

    환경변수는 OS 사용자 세션 단위로 설정된다. 따라서 OS 사용자가 접속할 때마다 적용하기 위해 사용자 환경설정 파일 .bash_profile에 추가해야 한다.

    아래 표는 Altibase 캐릭터셋에 따른 ALTIBASE_NLS_USE, LANG 환경변수 설정값을 보여준다.

    Altibase 캐릭터셋ALTIBASE_NLS_USELANG
    MS949MS949ko_KR.euckr
    KO16KSC5601KO16KSC5601ko_KR.euckr
    UTF8UTF8ko_KR.utf8

    위 표를 참고하여 사용자 환경설정 파일 .bash_profile에 환경변수를 추가한다.

    환경변수 설정 예제 - .bash_profile 에 추가
  3. 환경설정 파일(.bash_profile)을 적용한다.

    아래 명령어로 추가한 환경변수를 적용한다.

 

 

요약


앞에서 소개한 커널 파라미터와 환경변수의 권고값을 확인하는 방법을 표로 정리하였다.

분류권고설정확인방법
커널 파라미터CPU frequency Governorperformancecat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor | sort -u
CPU 코어의 클럭 속도가 최대로 고정grep MHz /proc/cpuinfo | sort -u
RemoveIPCnogrep RemoveIPC /etc/systemd/logind.conf
swappiness1

cat /proc/sys/vm/swappiness 또는
sysctl -a | grepswappiness

THP never

cat /sys/kernel/mm/transparent_hugepage/enabled

Hugepagesize 외에 모두 0grep -i huge /proc/meminfo
transparent_hugepage=never 포함cat /proc/cmdline
max_map_count2147483647cat /proc/sys/vm/max_map_count
공유 메모리shmmni4096

ipcs -m -l

sysctl -a | grep -e kernel.shmmax -e kernel.shmmni

shmmax2147483648
세마포어semmsl2000

ipcs -s -l

sysctl -a | grep -kernel.sem




semmns32000
semopm 512
semmni5029
OS 사용자 리소스 제한




data seg size

(kbytes, -d)unlimitedulimit -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 호환성

CPU frequency Governor

RemoveIPC

swappiness

THP

max_map_count

공유 메모리 및 세마포어

로케일(Locale)

MALLOC_ARENA_MAX

 

 

 

 

 

  • No labels