1. 환경
Host : Sun Ultra 10
Memor : 512MB
HDD : 14GB (설치할 화일시스템의 공간임)
Swap : 1.6GB
OS : Solaris 8
DB : Oracle 9i R1 (9.0.1)
2. 증상
처음 Solaris 8 설치 후 Oracle9i 설치시
설치는 정상적으로 되나 DB 생성시 50% 진행후 멈춰있는 상태.
Instance가 올라오지 못하는 상태임.
3. 해결
Solaris 설치후 /etc/system 화일을 아래와 같이 설정해줌.
***************************************
set shmsys:shminfo_shmmax=4294967295
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=100
set shmsys:shminfo_shmseg=10
set semsys:seminfo_semmni=100
set semsys:seminfo_semmsl=256
set semsys:seminfo_semmns=1024
set semsys:seminfo_semopm=100
set semsys:seminfo_semvmx=32767
********************************************
Oracle 9i R1에는 언급되어 있지 않으나
Oracle 9i R2 Installation Guide에 나와 있는 값임.
참고로 Oracle9i R1는 RAM 256MB,
Oracle9i R2는 RAM 512MB가 최소 설치 사양.
답변 1 답변자 max1013
날짜 2003-08-23 12:52:29.0
안녕하십니까? 오용섭입니다.
추가적인 내용입니다.
SUN에서 간혹 shared memory가 로드되지 않아 경우가 있어서
/etc/system파일에 위의내용을 강제적으로 올리기 위해 다음 구문을 사용합니다.
forceload:sys/shmsys
forceload:sys/semsys
forceload:sys/msgsys
1. shared memory parameter 설명
Name Default Max Description
------ --------------- --------------- ------------------------------------
-
shmmax 1048576 (1Meg) 4294967295 shared memory segment의 최대 크기를
(4GB) 지정한다. 이 크기는 shmget(2) 시스템
2.5.1 or 콜에서 요구할 수 있는 최대 크기이다.
higher 커널이 이 값 만큼의 메로리를 미리
할당하여 별도로 관리하는 것이 아니고
2147483647 필요할 때마다 할당 받아 사용한다. 그래서
(2GB) 이 값을 크게 지정하여도 시스템이 나쁜
2.5 or lower 영향을 주지는 않는다.
shmmin 1 4294967295 shared memory segment의 최소 크기를
(4GB) 지정한다. 이 값은 변경할 필요는 없다.
2.5.1 or
higher
2147483647
2.5 or lower
shmseg 6 32767 하나의 프로세서에 할당될 수 있는 최대
(32k) shared memory segment의 갯수를 지정한다.
이 값은 segment가 할당될 때, segment의
갯수를 조사하는데 사용된다. 그러므로
이 값에 의하여 미리 할당되는 자원은
없다. 만일 이 값이 34K를 넘어서면,
주의 메세지를 출력하고, 그 값은 32k로
설정한다.
shmmni 100 2147483647 시스템에 가용한 shared memory
(2GB) identifier의 최대 갯수를 지정한다.
모든 shared memory segment는
이 identifier에 의해 관리되며, shmget(2)
시스템 콜의 리턴값이다.
identifier 1개당 약 120 바이트 정도의
메모리가 미리 할당된다.
Solaris 2.5 이상 버전에서는
메모리의 1/4 이상이 이 identifier에
할당되지 못하도록 하며, 그 이상이
할당되면 경고 메세지를 출력하고,
shared memory module를 load하지 않는다.
2. shared memory parameter 설정하기
shared memory parameter를 시스템에 설정하려면 /etc/system 화일에 다음과
같은 라인을 추가하고, 시스템을 rebooting하면 변경사항이 반영된다.
set shmsys:shminfo_variable = value
여기서 ''variable''은 위에서 설명한 Name 필드에 있는 값이다.
예를 들면,
set shmsys:shminfo_shmmni = 150
shmmni의 값을 150으로 변경한다.
3. shared memory parameter 값을 조사하기
시스템에 설정되어 있는 shared memory parameter의 값은 ''sysdef'' 명령어로
확인할 수 있다.
$ sysdef
.... Skip ....
*
* IPC Shared Memory
*
1048576 max shared memory segment size (SHMMAX)
1 min shared memory segment size (SHMMIN)
100 shared memory identifiers (SHMMNI)
6 max attached shm segments per process (SHMSEG)
.... Skip ....
위에 있는 값들이 0로 보일 수 도 있다. 이 경우는 shared memory module이
커널에 올라와 있지 않기 때문이다. Solaris 2.x에서는 dynamic kernel을
사용한다. 이는 kernel module들이 사용될 때, kernel에 결합되고, 사용하지
않으면 커널에서 제거된다는 것을 의미한다. 강제적으로 shared memory
module을
커널에 load하려면 다음과 같이 ''modload'' 명령어를 사용할 수 있다.
# modload -p sys/shmsys
그리고 다시 sysdef 명령어는 사용하면, shared memory parameter를 확인할
수 있다.
4. 참고 문헌
시스템에 설치된 메뉴얼 페이지를 참고한다.
shmget(2), shmop(2), shmat(2), shmdt(2)
예제)
man shmget
1. semaphore parameter 개략 설명
Name Default Max Brief Description
------ ------- -------------- -------------------------------------
semmap 10 2147483647 semaphore map에 있는 entry의 갯수
semmni 10 65535 semaphore set (identifier)의 갯수
semmns 60 2147483647 시스템에 있는 semaphore의 갯수
65535 (usage)
semmnu 30 2147483647 시스템이 있는 "undo" structure의 갯수
semmsl 25 2147483647 하나의 semaphore ID에 있는 semaphore 최대 갯수
65535 (usage)
semopm 10 2147483647 하나의 semaphore call당 최대 operation 최대 갯수
semume 10 2147483647 하나의 프로세서당 "undo" entry 최대 갯수
semusz 96 *see below* "undo" structured의 크기(byte)
semvmx 32767 2147483647 semaphore 최대값
65535 (usage)
semaem 16384 2147483647 exit시에 보정될 최대값
32767 (usage)
2. semaphore parameter 세부 설명
semmap
semaphore resource map의 크기를 정의한다. 이 map에 있는 하나의 entry는
연속적인 가용한 semaphore를 차지한다.
semget(2) 시스템 콜에 의해 얻어지는 semaphore set을 위한 공간이다.
semmni
시스템에서 사용할 수 있는 최대 semaphore sets (identifiers)를 정의한다.
시스템에 있는 모든 semaphore set은 유일한 ID와 제어구조를 갖는다.
각 semaphore set에 대하여 84 바이트의 커널 메모리가 미리 할당된다.
semmni의 값을 65535 보다 크게 지정하면, 시스템은 경고 메세지를 출력하고
이 값은 65535로 설정한다.
semmns
시스템에 있는 semaphore의 갯수를 정의한다. 각 semaphore에 대하여
16 바이트의 커널 메모리가 미리 할당된다.
semmnu
시스템이 있는 semaphore undo structure를 정의한다. 각 undo structure에
대하여 semusz 크기 만큼의 커널 메모리가 미리 할당된다.
하나의 프로세스에 대하여 undo 정보를 기록하기 위하여 하나의 undo
structure가 필요하다.
semmsl
하나의 semaphore ID에 대하여 생성될 수 있는 semaphore의 갯수를 제한한다.
논리적으로 semmsl는 semmns의 값과 같거나 적어야 한다.
만일 이 값을 너무 크게 잡으면, 몇개의 semaphore ID가 시스템 전체에
있는 semaphore를 독식할 수 있다.
semopm
하나의 semop(2) 시스템 콜에서 처리할 수 있는 operation 수를 제한한다.
semume
하나의 프로세스가 가질 수 있는 undo record의 수를 제한한다.
semusz
semaphore undo structure의 크기를 정의한다. 이 값은 사용자가 변경하는
것이 아니고, 시스템에 의해 계산된다.
semusz = 8 * (semume + 2)
semvmx
하나의 semaphore의 최대값을 제한한다. undo structure와 semaem과의
연관관계가 있으므로 이 값의 디폴트 32767 보다 크게 지정하지 말아야
한다. 만일 디폴트 보다 크게하면, SEM_UNDO 기능을 사용할 수 없다.
semaem
adjust-on-exit undo element의 최대값을 제한한다.
3. semaphore parameter 설정하기
semaphore parameter를 시스템에 설정하려면 /etc/system 화일에 다음과
같은 라인을 추가하고, 시스템을 rebooting하면 변경사항이 반영된다.
set semsys:seminfo_variable = value
여기서 ''variable''은 위에서 설명한 Name 필드에 있는 값이다.
예를 들면,
set semsys:seminfo_semmap = 15
semmap(semaphore resource map)의 값을 15으로 변경한다.
4. semaphore parameter 값을 조사하기
시스템에 설정되어 있는 semaphore parameter의 값은 ''sysdef'' 명령어로
확인할 수 있다.
$ sysdef
.... Skip ....
*
* IPC Semaphores
*
10 entries in semaphore map (SEMMAP)
10 semaphore identifiers (SEMMNI)
60 semaphores in system (SEMMNS)
30 undo structures in system (SEMMNU)
25 max semaphores per id (SEMMSL)
10 max operations per semop call (SEMOPM)
10 max undo entries per process (SEMUME)
32767 semaphore maximum value (SEMVMX)
16384 adjust on exit max value (SEMAEM)
.... Skip ....
위에 있는 값들이 0로 보일 수 도 있다. 이 경우는 semaphore module이
커널에 올라와 있지 않기 때문이다. Solaris 2.x에서는 dynamic kernel을
사용한다. 이는 kernel module들이 사용될 때, kernel에 결합되고, 사용하지
않으면 커널에서 제거된다는 것을 의미한다. 강제적으로 semaphore module을
커널에 load하려면 다음과 같이''modload''명령어를 사용할 수 있다.
# modload -p sys/semsys
그리고 다시 sysdef 명령어는 사용하면, semaphore parameter를 확인할
수 있다.
5. 커널 메모리의 제약
Solaris 2.5 이상 버전에서는 semaphore가 메모리의 1/4 이상이 할당되지
못하도록 하며, 그 이상이 할당되면 경고 메세지를 출력하고, semaphore module
을
load하지 않는다.
6. 참고 문헌
시스템에 설치된 메뉴얼 페이지를 참고한다.
semget(2), semctl(2), semop(2)
예제)
man semget
1. message queue 개략 설명
Name Default Max Brief Description
------ ------- -------------- -------------------------------------
msgmap 100 2147483647 메세지 map에 있는 entry 갯수
msgmax 2048 2147483647* 메세지 최대 크기
msgmnb 4096 2147483647* 메세지 큐의 최대 크기
msgmni 50 2147483647 메세지 큐 identifier의 갯수
msgssz 8 2147483647* 메세지 segment의 크기
msgtql 40 2147483647 시스템 메세지 헤더 갯수
msgseg 1024 32767* 메세지 segment의 수 (MUST BE < 32768)
2. message queue 세부 설명
msgmap
메세지 큐 resource map의 크기를 정의한다. 이 map에 있는 하나의 entry는
연속적인 가용한 공간를 차지한다. 이것은 msgsnd(2) 시스템 콜에 의해
얻어지는 메세지 큐 segment를 위한 공간으로 사용된다.
msgmax
하나의 메세지에 대한 크기를 제한한다. 메세지의 크기가 이 값보다 크면
msgsnd(2) 시스템 콜은 EINVAL 오류값을 리턴한다.
이 값은 최대 2GB까지 사용할 수 있지만 시스템의 다른 요소들이 65535로
제한된 것이 있기 때문에 65535보다 큰 값을 사용할 경우에 예기치 못한
결과가 발생할 수 도 있다.
msgmnb
하나의 메세지 큐가 수용할 수 있는 메세지의 최대 크기를 제한한다.
이 값은 메세지 큐에 보관되어 있는 메세지들의 크기(byte)의 합계이다.
위에 기술된 최대값은 Solaris 2.4 이상의 버전이고, 그 이전의 버전에서는
최대값이 65535로 제한된다.
msgmni
시스템에 가용한 메세지 큐 identifier의 갯수를 정의한다.
시스템은 이 값만큼의 msgmni control structure에 해당되는 커널 메모리를
미리 할당한다. 하나의 control structure는 144 바이트이다.
msgtql
시스템에서 가용한 메세지 큐 헤더를 갯수를 정의한다. 메세지 큐에 들어
있지만 아직 읽혀지지 않은 메세지는 하나의 메세지 큐 헤더를 차지한다.
시스템은 이 값만큼의 msgtql control structure에 해당되는 커널 메모리를
미리 할당한다. 하나의 control structure는 12 바이트이다.
msgssz & msgseg
이 두개의 값에 의하여, 모든 큐에 있는 모든 메세지에 대한 가용한 전체
바이트 수를 정의한다. 시스템은 메세지 큐들에 대하여 커널 메모리를
미리 할당한다. 메모리의 총합은 msgssz * msgsseg 이다.
msgssz * msgsseg의 값은 2147483647을 넘어서는 안된다.
3. message queue parameter 설정하기
message queue parameter를 시스템에 설정하려면 /etc/system 화일에 다음과
같은 라인을 추가하고, 시스템을 rebooting하면 변경사항이 반영된다.
set msgsys:msginfo_variable = value
여기서 ''variable''은 위에서 설명한 Name 필드에 있는 값이다.
예를 들면,
set msgsys:msginfo_msgmap = 150
msgmap(message queue resource map)의 값을 150으로 변경한다.
4. message queue parameter 값을 조사하기
시스템에 설정되어 있는 message queue parameter의 값은 ''sysdef'' 명령어로
확인할 수 있다.
$ sysdef
.... Skip ....
*
* IPC Semaphores
*
100 entries in msg map (MSGMAP)
2048 max message size (MSGMAX)
4096 max bytes on queue (MSGMNB)
50 message queue identifiers (MSGMNI)
8 message segment size (MSGSSZ)
40 system message headers (MSGTQL)
1024 message segments (MSGSEG)
.... Skip ....
위에 있는 값들이 0로 보일 수 도 있다. 이 경우는 message queue module이
커널에 올라와 있지 않기 때문이다. Solaris 2.x에서는 dynamic kernel을
사용한다. 이는 kernel module들이 사용될 때, kernel에 결합되고, 사용하지
않으면 커널에서 제거된다는 것을 의미한다. 강제적으로 message queue
module을 커널에 load하려면 다음과 같이 ''modload''명령어를 사용할 수 있
다.
# modload -p sys/msgsys
그리고 다시 sysdef 명령어는 사용하면, message queue parameter를 확인할
수 있다.
5. 커널 메모리의 제약
Solaris 2.5 이상 버전에서는 message queue가 메모리의 1/4 이상이 할당되
지
못하도록 하며, 그 이상이 할당되면 경고 메세지를 출력하고, message queue
module을 load하지 않는다.
6. 참고 문헌
시스템에 설치된 메뉴얼 페이지를 참고한다.
msgget(2), msgctl(2), msgop(2), msgsnd(2), msgrcv(2)
예제)
man msgget
1. 최대 사용자수 지정하기 (maxusers)
최대 사용자수는 시스템에 설치된 메모리의 양에 따라 자동적으로 적절한 값
이
설정된다. 특별한 경우가 아니면 이 파라메터를 변경하지 않는 것이 바람직
하다.
또한, 이 파라메터를 기준으로 다음과 같은 파라메터들이 자동적으로 설정된
다.
max_nprocs Maximum number of processes (default = 10 + 16 * maxusers)
ncallout Number of callout buffers (default = 16 + max_nprocs)
ufs_ninode Maximum number of inodes.
(default = max_nprocs + 16 + maxusers + 64)
ncsize Number of dnlc entries.
(default = max_procs + 16 + maxusers + 64)
명시적으로 최대 사용자수를 지정하려면, /etc/system 화일에 다음과 같은
라인을 추가하고, 시스템을 리부팅한다.
set maxusers=100
2. 최대 프로세스 갯수 지정하기 (max_nprocs)
시스템이 허용하는 최대 프로세스 수는 최대 사용자 수에 비례하여 자동으로
설정된다. 그러나 그 갯수가 너무 적거나 많으면 사용자가 명시적으로 지정
할
수 있다. 최대 프로세스 수를 10000으로 지정하려면, /etc/system 화일에
다음과 같은 라인을 추가하고, 리부팅한다.
set max_nprocs=10000
3. 가상단말기 갯수 지정하기 (pt_cnt)
시스템에 사용되는 가상단말기 갯수는 디폴트로 48개가 설정되어 있다.
가상단말기는 /dev/pts/0, ..., /dev/pts/47로 되어 있다. 이 가상단말기는
telnet이나 rlogin을 통해서 시스템으로 들어올 경우에 하나씩 사용된다.
X-window에서 cmdtool이나 shelltool, dtterm을 실행하여도 하나씩 사용된
다.
만일, 가상단말기의 갯수를 128개로 늘이려면, /etc/system 화일에 다음과
같은
라인을 추가하고, 리부팅한다.
set pt_cnt=128
set npty=128
** 시스템을 리부팅할 때에는 반드시 reconfiguration 모드로 리부팅하여야
한다.
예제) command:
# reboot -- -r
PROM:
OK boot -r
4. 최대 화일 디스크립트 갯수 지정하기 (rlim_fd_cur)
하나의 프로세스가 동시에 open할 수 있는 최대 화일의 개수는 디폴트로
64개이고, 1024개까지 화일의 갯수를 늘릴 수 있다.
shell에서 최대화일의 갯수를 512개로 늘이려면, 다음과 같이 지정한다.
csh 경우)
limit descriptors 512
sh, ksh 경우)
ulimit -n 512
shell에서 한번 지정되면 이후에 실행되는 모든 명령어에 이 영향이 반영된
다.
만일, 디폴트 값을 128로 하고 최대 화일의 갯수를 1500까지 늘릴 수 있도록
하려면, /etc/system 화일에 다음과 같은 내용을 추가하고, 시스템을 리부팅
한다.
set rlim_fd_max=1500
set rlim_fd_cur=128
5. 최대 UFS inode수 지정하기 (ufs_ninode)
시스템에서 화일을 open하면 하나의 화일에 대하여 하나의 ufs_niode를 가지
게
된다. 명시적으로 이 값을 지정하려면, /etc/system 화일에 다음과 같은 내
용을
추가하고, 시스템을 리부팅한다.
set ufs_ninode=10000
[이 게시물은 최고관리자님에 의해 2007-08-07 16:29:47 홈페이지에서 이동 됨]

윤진한
06-05-25 08:46
0개
544회
Oracle
오라클 설치를 위한 /etc/system 파일 설정
추천
0
비추천
0
댓글목록
등록된 댓글이 없습니다.