Created with Raphaël 2.1.0
    Loading...
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

 

1

2

개요


본 문서에서는 유닉스(UNIX) 시스템에서 프로세스가 요청하는 메모리에 대해 어떻게 관리되는지 개략적인 이해를 위해 만들어 졌다.

따라서, 심도 있는 이해는 각 벤더에서 제공하는 문서 등을 참고하도록 한다

 

Icon

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

Altibase 기술지원센터 : 02-2082-1114

Icon

이 문서는 정보 제공을 목적으로 제공되며, 사전에 예고 없이 변경될 수 있습니다. 이 문서는 오류가 있을 수 있으며, 상업적 또는 특정 목적에 부합하는 명시적, 묵시적인 책임이 일절 없습니다. Altibase는 이 문서에 대하여 관련된 특허권, 상표권, 저작권 또는 기타 지적 재산권을 보유할 수 있습니다.

 

 

Solaris 시스템의 관리 기법


솔라리스 운영체제의 메모리 관리에 대해 설명한다.

 

메모리 할당


  • 솔라리스는 reserved라는 형태로 메모리를 할당한다. reserved영역은 swap영역에 존재한다. 

  • 즉, 어떤 프로세스가 10M를 요청하면 swap영역에 10M를 먼저 할당해 놓고 실제 해당 프로세스가 메모리에 접근할 때 물리적 메모리에 10M를 할당하는 형태로 동작한다.
    따라서, 솔라리스는 Swap영역이 부족하면 어떠한 프로세스도 동작할 수 없다. 

    -bash-4.0$ /usr/sbin/swap -s

    total: 3610640k bytes allocated + 1939792k reserved = 5550432k used, 36742272k available

    위의 박스에 예처럼 swap정보로 볼 때 실제 물리적인 메모리가 여유 있을 때라도 Swap영역이 쓰여 지고 있는걸 확인할 수 있는데 이는 솔라리스 자체가 메모리 요청에 대해 무조건 reserved영역을 먼저 할당하는 정책을 갖고 있기 때문이다.
    아래는 코드상으로 VSZ/swap영역의 변화를 보여 준다.

 Memory AllocationReserved(Swap)VSZ
1. 요청P = malloc(100M)100M0M
2. 실제 사용

For (i=0; i<10M;i++)

   *(p+i) = 1
90M10M

실제 코드상으로 alloc을 하여도 메모리가 즉시 증가하지 않는다. 이후 실제 접근 시점에 메모리 사용량이 증가하는 것을 확인할 수 있다.

 

메모리 부족


솔라리스는 기본적으로 여유 있는 메모리는 파일캐쉬로 사용한다.

이 조건은 기본적으로 물리적 메모리가 lotsfree로 설정된 값(전체 메모리의 1/64) 이상으로 여유 있을 때에만 파일캐쉬로 사용한다.

(5.7이하에서는 파일캐쉬를 free메모리가 필요로 할 때 우선적으로 선택될 수 있도록 옵션을 줘야 했으나 5.8 이상부터는 기본적으로 파일캐쉬 역시 free메모리에 잡힌다. 따라서, AIX/HP와 달리 사용자가 별도의 설정을 할 필요는 없다.)

 

그런데, 만일, lotsfree이하로 유지가 되기 시작하면 시스템은 메모리 페이지들을 검색하여 최근 사용되지 않는 페이지들을 찾아내기 시작한다. (vmstat 정보에서 sr 부분에 이러한 검색 수치가 나온다.) 

 

lotsfree를 유지하기 위해 이러한 자주 접근되지 않는 페이지들을 메모리에 내리고 lotsfree수준을 채우도록 동작한다.

이와 같은 동작을 swap(swapping)이 발생한다고 지칭한다. (vmstat상에서는 fr은 메모리의 freePage된 개수를 의미하는데 free되었다는 말은 해당 메모리상의 페이지가 변경된 정보가 있다면 디스크로 갱신되게 됨으로 이와 같은 swapping이 발생하는 상태에서는 디스크I/O가 빈번하게 발생함으로 시스템 전체의 성능이 저하되는 현상을 보인다.)

 

pmap


솔라리스는 다음과 같이 프로세스의 실 사용 부분에 대해 상세하게 조회할 수 있는 유틸을 제공하고 있다.

 

# pmap -F 22748

0000000100D22000       8560K rwx--  /home1/hjkim/altibase/5.1.5.72/bin/altibase

000000010157E000     488320K rwx--    [ heap ]

FFFFFFFF72EFE000          8K rw--R    [ stack tid=74 ]

FFFFFFFF730FC000         16K rw--R    [ anon ]

FFFFFFFF732FC000         16K rw--R    [ anon ]

FFFFFFFF73C00000      10240K rw-s-  dev:118,46 ino:45717892

맨 위는 프로세스 메모리가 될 것이고 heap영역이 메모리DB등이 위치하는 영역이 된다. anon의 의미는 MMAP_PRIVATE 맵핑을 가진 페이지에 대해 초기 접근 시 영역을 의미한다. ino등이 있는 것은 mmap으로 올라온 리두 로그 버퍼 영역이라고 보면 된다.

 

AIX 시스템의 메모리 관리 정책


AIX 운영체제의 메모리 관리에 대해 설명한다.

 

메모리의 분류


  • AIX의 메모리 사용에 대해 이해를 위해 먼저 메모리의 분류에 대한 정의를 설명한다.

분류설명
PersistentJFS의 파일캐쉬로 사용되는 영역
ClientCDROM, NFS, JFS2의 파일캐쉬로 사용되는 영역
ComputationalProcess stack, heap, shared Memory 등의 영역

 

이해를 위해 svmon으로 나온 결과를 가지고 설명해 보도록 한다. (svmon의 결과는 특별한 표기가 없는 한 모두 page단위이며 1page는 기본적으로 4K이다.)

Shell> svmon –G

size         inuse         free          pin      virtual

memory      2031616     1779678      251938      474697     1682009

pg space    4128768      495129

work         pers         clnt        other

pin          404863            0            0       69834

in use       1225427             5      554246

위의 결과를 아래 표에서 먼저 설명한다. 

 

 

-bash-4.0$ /usr/sbin/swap -s
 
 
total: 3610640k bytes
allocated + 1939792k reserved = 5550432k used, 36742272k available

위의 박스에 예처럼 swap정보로 볼 때 실제 물리적인 메모리가 여유 있을 때라도 Swap영역이 쓰여 지고 있는걸 확인할 수 있는데 이는 솔라리스 자체가 메모리 요청에 대해 무조건 reserved영역을 먼저 할당하는 정책을 갖고 있기 때문이다.

아래는 코드상으로 VSZ/swap영역의 변화를 보여 준다.

 

$ ./altibase-HDB-server-6.5.1.7.1-LINUX-X86-64bit-release.run
----------------------------------------------------------------------------
Welcome to the ALTIBASE HDB Server 6.5.1.7.1 setup wizard.
----------------------------------------------------------------------------
Installation Directory
 
Please specify the installation directory for ALTIBASE HDB Server 6.5.1.7.1
 
Installation directory [/home/altibase/]: /home/altibase/altibase_home

 

 

  •  

  • DB 생성 방식을 결정한다. (FULL 패키지 / 패치)

    Please select the installation type.
     
    Installation type
     
    [1] Full installation: full package install
    [2] Patch: patch package install
    Please choose an option [1] : 1
  • 커널 설정값 가이드를 확인할 수 있다. (설치 경로 하위 install 디렉토리의 pre_install.sh 를 통해서도 확인할 수 있다.)

    ----------------------------------------------------------------------------
    Pre-Installation Requirements for ALTIBASE HDB
    It is first necessary to set your system environment to ensure that ALTIBASE HDB
    will run properly. Before installing ALTIBASE HDB, the kernel parameter values
    must be set using the root user account. The kernel parameter values may be
    modified after installation; however, they must be set prior to starting
    ALTIBASE HDB.
     
    Please refer to the installation manual and pre_install.sh script file.
    (pre_install.sh: '$Altibase_install_dir'/install/pre_install.sh)
     
    ================ LINUX ================
    [ How to modify kernel parameter values ]
     
    echo 512 32000 512 512 > /proc/sys/kernel/sem
    echo 872415232 > /proc/sys/kernel/shmall
     
    # shmall
    If it is desired to use ALTIBASE HDB in shared memory mode, the value of
    'shmall' must be set. This value determines the maximum size of an Altibase
    database.
     
    Press [Enter] to continue :
    These values must be set in order for ALTIBASE HDB to operate properly.
    They must be set such that they are suitable for the system configuration.
    =====================================
     
    Press [Enter] to continue :
  • DB Name 을 결정한다. (기본값 = mydb)
    * DB Name 은 변경 시 DB 재구성이 필요하다.

    ----------------------------------------------------------------------------
    ALTIBASE HDB Property Settings
    Step 1: Basic Database Operation Properties
    Database name [mydb]:
  • DB PORT 를 설정한다. (기본값 = 20300)

    ALTIBASE HDB connection port number (1024-65535)      [20300]:
  • MEM_MAX_DB_SIZE 값을 결정한다. (기본값 = 2G)
    * MEM_MAX_DB_SIZE 는 memory 에 저장할 데이터의 '최대 값'을 의미하며, 미리 할당하는 것이 아니라 제한 값을 의미한다.

    Maximum size of memory database
     
    - MIN value: 16M (K = kB, M = MB, G = GB) [2G]:
  • DB 생성 방식을 결정한다. (FULL 패키지 / 패치)

    Please select the installation type.
     
    Installation type
     
    [1] Full installation: full package install
    [2] Patch: patch package install
    Please choose an option [1] : 1
  • DB 생성 방식을 결정한다. (FULL 패키지 / 패치)

    Please select the installation type.
     
    Installation type
     
    [1] Full installation: full package install
    [2] Patch: patch package install
    Please choose an option [1] : 1
  • DB 생성 방식을 결정한다. (FULL 패키지 / 패치)

    Please select the installation type.
     
    Installation type
     
    [1] Full installation: full package install
    [2] Patch: patch package install
    Please choose an option [1] : 1
  • DB 생성 방식을 결정한다. (FULL 패키지 / 패치)

    Please select the installation type.
     
    Installation type
     
    [1] Full installation: full package install
    [2] Patch: patch package install
    Please choose an option [1] : 1
  • DB 생성 방식을 결정한다. (FULL 패키지 / 패치)

    Please select the installation type.
     
    Installation type
     
    [1] Full installation: full package install
    [2] Patch: patch package install
    Please choose an option [1] : 1
  • Altibase 5.5.1 부터 glibc 버전을 기준으로 호환성 여부를 확인한다.
  • Altibase 서버 버전 별 호환성이 보장된 glibc 버전은 아래와 같다.

    data-pageid="13436487" glibc

1

2

Altibase 7


  • glibc-2.12-1.166.el6_7.1 이상을 권고한다.
  • 이전 버전의 glibc는 시스템 콜(malloc/free) 함수가 race condition으로 인해 deadlock이 발생할수 있는 버그가 존재한다.

1

2

DB 생성 시 유의 사항 


  • glibc 버전 확인 방법은 다음과 같다.

    $ rpm -q glibc


    AID 작성 안내 - 코드 작성의 또다른 예제입니다. 기존 Gliffy Diagram은 수정할 수 없으니 참고만해서 사용하세요.

    data-pageid="13435760" c_parser_탑재

  • getconf -a | grep glibc 로도 확인할 수 있으나 상세 버전 확인을 위해 위의 명령어로 확인하는 것을 권고한다.

1

2

3

4

  • No labels