1
2
개요
본 문서에서는 유닉스(UNIX) 시스템에서 프로세스가 요청하는 메모리에 대해 어떻게 관리되는지 개략적인 이해를 위해 만들어 졌다.
따라서, 심도 있는 이해는 각 벤더에서 제공하는 문서 등을 참고하도록 한다
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 Allocation | Reserved(Swap) | VSZ | |
---|---|---|---|
1. 요청 | P = malloc(100M) | 100M | 0M |
2. 실제 사용 | For (i=0; i<10M;i++) *(p+i) = 1 | 90M | 10M |
실제 코드상으로 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의 메모리 사용에 대해 이해를 위해 먼저 메모리의 분류에 대한 정의를 설명한다.
분류 | 설명 |
---|---|
Persistent | JFS의 파일캐쉬로 사용되는 영역 |
Client | CDROM, NFS, JFS2의 파일캐쉬로 사용되는 영역 |
Computational | Process 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"
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"
getconf -a | grep glibc 로도 확인할 수 있으나 상세 버전 확인을 위해 위의 명령어로 확인하는 것을 권고한다.
1
2
3
4