커널 파라미터 설정
각각의 OS별로 검사해야 할 커널 파라미터는 다르지만 대부분 (1) 프로세스별 메모리 할당 한계값(memory allocation limit) (2) 쓰레드 관련 파라미터 (3) 공유 메모리 세그먼트 최대 크기 (4) 세마포어 관련 파라미터들의 수정이 이루어져야 한다.
- 메모리 할당 한계값
각 프로세스가 할당(allocation)할 수 있는 메모리 공간에 관련된 파라미터(hp의 경우 maxdsiz_64bit, dec의 경우 per-proc-address-space)의 경우 알티베이스가 운용될 수 있는 충분한 공간이 제공되어야 한다. 그렇지 않을 경우 운용 중에 실제 물리적 메모리가 충분함에도 불구하고 insufficient memory error가 발생하게 된다.
- 공유 메모리 세그먼트 최대 크기
일반적으로 알티베이스는 메모리 상의 공유 메모리(shared memory)에 데이터베이스를 저장하기 때문에 공유 메모리 세그먼트(공유 메모리 세그먼트)와 관련된 커널 파라미터가 적절히 수정되어야 한다. 알티베이스가 사용하는 공유 메모리 세그먼트의 크기는 알티베이스 설정에 따라서 달라진다. 영향을 미치는 파라미터는 STARTUP_SHM_CHUNK_SIZE, PERS_PAGE_CHUNK_COUNT 이 두 가지인데 앞의 파라미터 STARTUP_SHM_CHUNK_SIZE는 알티베이스 구동시 공유 메모리 세그먼트의 크기를 결정하는 파라미터로서 만약 이 파라미터보다 데이터베이스의 크기가 클 경우에는 이 파라미터를 기준으로 해서 공유 메모리 세그먼트가 분할되어져서 만들어진다. 알티베이스 운용 중에 데이터 저장 공간이 부족하여 새롭게 메모리 할당이 생겨서 공유 메모리 세그먼트가 추가되어질 경우에는 PERS_PAGE_CHUNK_COUNT 파라미터의 크기 만큼씩 공유 메모리 세그먼트가 분할되어져서 만들어진다. 결국 알티베이스 운영 중에 아무런 문제가 발생하지 않으려면 시스템에서 제공하는 공유 메모리 세그먼트의 최대 크기를 위의 파라미터에 의해서 만들어지는 공유 메모리 세그먼트보다 크게 만들어야 알티베이스 구동 시나 새로운 공유 메모리 세그먼트 할당시 문제가 발생하지 않는다. 만약 커널 파라미터가 충분히 크지 않을 경우 알티베이스 구동 시나 운용 시 shmget() system call에서 에러가 발생하게 된다.
- 세마포어 파라미터
세마포어 파라미터의 경우에는 클라이언트 프로그램과 알티베이스가 IPC 통신을 하기 위해서 변경이 필요하며 그 값들은 동시에 IPC 연결을 하는 세션 수와 연관이 있다.
HP-UX(11.00, 11i )
HP에서는 커널 파라미터 수정을 위해서 sam이라는 유틸리티가 존재한다. 아래의 방법으로 커널 파라미터를 수정하면 되는데 반드시 시스템을 리부팅하여야 하는 점을 명심해야 한다.
루트 계정에서 sam을 수행한 후 kernel configuration => configurable 파라미터 화면에서 아래의 커널 파라미터를 수정한다. 그리고 나서 menu 화면의 action에서 process new kernel로 반드시 커널을 재구성(rebuild)한 후 시스템을 리부팅한다.
Sun Solaris
Sun Solaris의 경우 커널 파라미터를 수정하려면 /etc/system 파일을 편집한 후 시스템을 리부팅하여야 한다. 아래 priority_paging은 Sun 시스템의 파일시스템 캐시(filesystem cache)에 관련된 파라미터로서 direct I/O를 사용하지 않고 파일시스템 캐시를 이용할 경우 메모리 사용량이 높게 나오는 문제 때문에 반드시 설정되어야 한다.
IBM AIX
AIX의 경우에는 공유 메모리와 세마포어 관련해서 특별히 맞추어 줄 필요는 없고 단지 사용자별 한계값(User Resource Limit, ulimit 명령어로 확인)의 값들을 바꾸어 주어야 한다. 각 사용자별 한계값을 바꾸기 전에 시스템 한계값(system level resource limit)을 우선 바꾸어야 하는데 이것은 /etc/security/limits 의 편집만으로 가능하다. 이 화일에서 default:부분의 data, rss, dsize를 각각 -1 ( unlimited)로 맞추면 된다. 그렇게 한 후 아래의 작업을 하여서 알티베이스 사용자의 사용자별 한계값을 바꿀 수 있다.
Digital UNIX (OSF1) (V4.0)
Dec OS의 경우 V4.0과 V5.1에서 사용되는 파라미터의 이름은 다르지만 비슷하기 때문에 유추해서 판단하면 된다. 그리고 hp와 마찬가지로 프로세스와 IPC에 관련된 많은 파라미터들이 수정되어야 한다. Dec 파라미터는 크게 세 부분, PROC(Process ) , IPC, VM(Virtual memory )으로 나누어져 있으며 아래의 명령어로 각각의 파트에 속한 파라미터 이름과 현재 설정된 값을 확인할 수 있다.
/sbin/sysconfig -q proc : Process resource limitation의 값 /sbin/sysconfig -q IPC : IPC 파라미터의 값 /sbin/sysconfig -q vm : Virtual memory 파라미터값 uerf -r 300 |grep -i mem : 현재 시스템의 실제 메모리 크기
Proc subsystem 관련 파라미터들은 대개 프로세스의 memory address limit에 관련된 값이므로 알티베이스와 밀접한 관계가 있다. 즉 max-per-proc-data-size의 값 이상으로 프로세스 데이터(process data) 영역을 할당받을 수 없다. 그러므로 해당 값들은 되도록 크게 설정해야 문제가 없다. (per-proc-data-size, max-per-proc-data-size, max-per-proc-address-space, per-proc-address-space)
IPC subsystem의 경우 당연히 shm-max(최대 공유 메모리 세그먼트의 크기)는 데이터베이스 크기 및 알티베이스 프로퍼티 값과 연관지어서 크게 설정해야 하고 세마포어와 관련된 파라미터 값들도 IPC 통신을 사용할 것이라면 크게 설정해야 한다.
VM subsystem에서 주의할 파라미터는 vm-vpagemax (contiguous virtual memory address max) 값이다. 이 값이 작을 경우 데이터베이스 생성시 insufficient memory error가 발생할 수 있으니 유의하기 바란다. (OSF1 V5.1에서는 위의 파라미터가 없어진 것 같다. )
/etc/sysconfigtab 파일에 아래의 내용이 포함되지 않았다면 아래의 내용을 파일에 추가한 후 시스템을 리부팅하여야 한다.
* V5.0이상에서는 아래의 파라미터 이름이 조금씩 다르지만 해당 파라미터들의 값을 똑같이 설정하면 된다.
Linux (RedHat 계열)
/etc/rc.d/rc.local의 마지막 부분을 아래와 같이 편집한 후 재부팅 하면 된다.
echo 2147483648 > /proc/sys/kernel/shmmax echo 512 32000 512 512 > /proc/sys/kernel/sem
또는
위의 명령어를 재부팅할 때마다 쉘에서 수행하면 된다.
* IPC 사용에 대한 주의사항
Linux Kernel 2.5 이하 version에서는 thread program에서 SEM_UNDO를 사용하는 semaphore operation에 문제점이 보고되어 있다.
이러한 문제점은 알티베이스에서 다음과 같은 현상으로 나타난다.
Client의 빈번한 연결 및 해제가 다른 cilent의 동작에 영향을 미쳐 정상동작하는 client의 접속이 끊어지는 현상이 발생할 수 있다.
'*nix' 카테고리의 다른 글
[AIX] errpt 시스템 에러로그 - dump (0) | 2011.03.11 |
---|---|
[AIX] svmon 명령어를 이용한 메모리 사용량 점검 (0) | 2010.07.27 |
nmon 성능: AIX와 리눅스 성능 분석을 위한 무료 툴 (0) | 2010.07.07 |
man에서 한글 깨짐 (0) | 2010.06.14 |
Unix 프로세스 Job Control (0) | 2010.06.14 |