솔라리스/리눅스

Solaris 10 IPC 설정

지니아부지 2012. 1. 19. 23:28
참조 : http://shad0w.egloos.com/778215
참조 : http://www.ntech.in/v2/bbs/board.php?bo_table=2_solaris&wr_id=282&page=2


1. Solaris 8 버전 이하에서는 /etc/system 파일에서 IPC 설정을 하면서 제어가 가능했다.
2. 새롭게 Solaris 10 버전에서는 /etc/project 파일에서나 Resource controls 프로그램으로 
    IPC 설정이 가능하다.
3. 기존의 구성 설정은 무시된다.

자원 제어

폐기된 항목

이전값

최대값

새 기본값

process.max-msg-qbytes

msginfo_msgmnb

4096

ULONG_MAX

65536

process.max-msg-messages

msginfo_msgtql

40

UINT_MAX

8192

process.max-sem-ops

seminfo_semopm

10

INT_MAX

512

process.max-sem-nsems

seminfo_semmsl

25

SHRT_MAX

512

project.max-shm-memory

shminfo_shmmax

0x800000

UINT64_MAX

실제 메모리의 1/4

project.max-shm-ids

shminfo_shmmni

100

224

128

project.max-msg-ids

msginfo_msgmni

50

224

128

project.max-sem-ids

seminfo_semmni

10

224

128



각설하고 우리는 여기서 prctl 라는 Resource controls 프로그램을 사용하기로 하였다.
이 프로그램은 실행되는 프로세스, 태스크, 프로젝트 단위로 Resource를 얻거나 설정할 수 있다.
기타 다른 설정할 수 있는 프로그램으로는 rctladm 이라는게 있다고 한다.
물론, 찾아보면 zonecfg 로도 설정할 수 있고 /etc/project 파일에서 설정할 수 있다고 한다.
하지만, 내가 생각하기에 가장 명료한 prctl 로 제어를 하기로 했다.

# prctl -n project.max-shm-ids $$
NAME ...생략
           privileged       128 ... 이하 생략

value 인 128을 수정해야 한다.

# prctl -n project.max-shm-ids -v 1000 -r -i project user.root
# prctl -n project.max-shm-ids $$
........ 생략 1.00K .... 생략...

1000 개로 바뀐 걸 알 수 있다. 명령어에 대한 자세한 사항은 해당 man 페이지나
http://docs.sun.com/app/docs/doc/816-5165/prctl-1?l=ko&a=view 사이트에서
자세히 알 수 있고, 마지막 user.root 는 어디에 적용시킬지 정하는 건데
# id -p 를 통해서 현재 내 projid=1(user.root) 임을 확인하고 적용시켰다.
물론 그룹으로 해도 되며, group.root 형식으로 하면 된다.

두 번째로, shm-memory 값도 변경하여야 한다. 형식은 위와 같다.

# prctl -n project.max-shm-memory -v 100M -r -i project user.root

확인 하면 100MB로 설정 돼 있는 것을 알 수 있을 것이다.
물론 이는 시스템이 재부팅 되면 다시 기본 값으로 되돌아 온다.
이를 막기 위해서는 /etc/project 파일에 적어주는 것과
해당 명령을 부팅 시에 자동으로 적용 시킬 수 있게 만들어 주면 될 것이다.


Solaris 10의 적용
/etc/project 파일에 적용

만들고자 하는 계정의 ID선택
*** solaris 10 default sem&shm 관련 파라미터 ***
# projadd –U 계정ID –K “project.max-sem-ids=(priv,2048,deny)” user.계정ID ;; seminfo_semmni
# projmod –a –K “project.max-shm-memory=(priv,4294967295,deny)” user.계정ID ;; shminfo_shmmax
# projmod –a –K “process.max-sem-nsems=(priv,200,deny)” user.계정ID ;; seminfo_semmsl
# projmod –a –K “process.max-sem-ops=(priv,100,deny)” user.계정ID ;; seminfo_semopm
# projmod –a –K “process.max-shm-ids=(priv,100,deny)” user.계정ID ;; shminfo_shmmni
*** message queue 관련 파라미터 ***
# projmod –a –K “process.max-msg-qbytes=(priv,1048576,deny)” user.계정ID ;; msginfo_msgmnb
# projmod –a –K “project.max-msg-messages=(priv,100,deny)” user.계정ID ;; msginfo_msgtql
# projmod –a –K “project.max-msg-ids=(priv,100,deny)” user.계정ID ;; msginfo_msgmni

Example)
*** solaris 10 default sem&shm 관련 파라미터 ***
projadd -U oracle -K "project.max-sem-ids=(priv,2048,deny)" user.oracle
projmod -a -K "project.max-shm-memory=(priv,4294967295,deny)" user.oracle
projmod -a -K "process.max-sem-nsems=(priv,200,deny)" user.oracle
projmod -a -K "process.max-sem-ops=(priv,100,deny)" user.oracle
projmod -a -K "process.max-shm-ids=(priv,100,deny)" user.oracle


*** message queue 관련 파라미터 ***
projmod -a -K "process.max-msg-messages=(priv,100,deny)" user.oracle
projmod -a -K "project.max-msg-ids=(priv,100,deny)" user.oracle
projmod -a -K "process.max-msg-qbytes=(priv,1048576,deny)" user.oracle



수정하고자 하는 파라메터값 선택
projmod -s -K "project.max-sem-ids=(priv,값입력, deny)" user.oracle
projmod -s -K "project.max-shm-memory=(priv,값입력,deny)" user.oracle
projmod -s -K "process.max-sem-nsems=(priv,값입력,deny)" user.oracle
projmod -s -K "process.max-sem-ops=(priv,값입력,deny)" user.oracle
projmod -s -K "process.max-shm-ids=(priv,값입력,deny)" user.oracle

projmod -s -K "process.max-msg-messages=(priv,값입력,deny)" user.oracle
projmod -s -K "project.max-msg-ids=(priv,값입력,deny)" user.oracle
projmod -s -K "process.max-msg-qbytes=(priv,값입력,deny)" user.oracle


삭제하고자하는 파라메터값 선택
projmod -r -K "project.max-sem-ids=(priv,2048,deny)" user.oracle
projmod -r -K "project.max-shm-memory=(priv,4294967295,deny)" user.oracle
projmod -r -K "process.max-sem-nsems=(priv,200,deny)" user.oracle
projmod -r -K "process.max-sem-ops=(priv,100,deny)" user.oracle
projmod -r -K "process.max-shm-ids=(priv,100,deny)" user.oracle

projmod -r -K "process.max-msg-messages=(priv,100,deny)" user.oracle
projmod -r -K "project.max-msg-ids=(priv,100,deny)" user.oracle
projmod -r -K "process.max-msg-qbytes=(priv,1048576,deny)" user.oracle


파라메터 적용 값 확인
# more /etc/project
# prctl -i project user.계정ID
# projects -l

삭제하고자 하는 프로젝트(계정ID)
# projdel  user.계정ID
# more /etc/project


20.3. ALTIBASE 대상 튜닝 가이드
Parameter Name Value Description
SHMMAX >= 4294967295 하나의 Share Memory Segment Size의 최대 값 (4GB)
SHMMIN 1 하나의 Share Memory Segment Size의 최소 값
SHMMNI > = 500 시스템 내 Share Memory Segments의 Max 수
SHMSEG >= 200 한 Process가 갖을 수 있는 Share Memory Segments의 Max 수
SEMMNS 8192 시스템 내 Semaphore 생성 Max 수
SEMMNI 5029 시스템 내 Semaphore Sets의 Max 수
SEMMSL 2000 Semaphore Sets내의 생성 Semaphore 수
SEMMAP 5024 시스템 내 Semaphore Map Max 수
SEMMNU 1024 시스템 내 Semaphore Undo Structure 수
SEMOPM 512 Maximum number of operations per semop call
SEMUME 512 32bit
rlim_fd_max 4096 64bit
rlim_fd_cur 1024 유의사항 2참고
유의사항1:
위에 명시한 shminfo_shmmni, shminfo_shmseg 설정값은 알티베이스서버가 단독으로 서버에서 운영될 경우이며 별도의 어플리케이션프로그램(예:오라클)이 동시에 운영될 경우 해당 어플리케이션의 설정값을 합산하여 설정해야 한다. 알티베이스계정으로 시스템에 로그인한 후 ulimt –a 를 수행하였을 때 “nofiles” 값이 너무 적게 설정되어 있을 경우 Altibase 실행유저의 .profile를 vi로 열어서 ulimit 명령을 삽입하여 적절한 값으로 늘려주어야 한다. (예) ulimit –n 4096
유의사항2:
rlim_fd_cur 값이 rlim_fd_max 값보다 작은 경우, Altibase 실행유저의 .profile 를 vi로 열어서 ‘ulimit –n <num>’ 을 이용하여 두 값이 같아지도록 한다.
- /etc/system 파일에 ALTIBASE 파라미터 값 적용 방법
#vi /etc/system


set rlim_fd_cur=1024
set rlim_fd_max=4096

set shmsys:shminfo_shmmax = 4294967295
set shmsys:shminfo_shmmin = 1
set shmsys:shminfo_shmmni = 500
set shmsys:shminfo_shmseg = 200

set semsys:seminfo_semmns = 8192
set semsys:seminfo_semmni = 5029
set semsys:seminfo_semmsl = 2000
set semsys:seminfo_semmap = 5024

set semsys:seminfo_semmnu = 1024
set semsys:seminfo_semopm = 512
set semsys:seminfo_semume = 512

Example)
*** solaris 10 default sem&shm 관련 파라미터 ***
projadd -U altibase -K "project.max-sem-ids=(priv,5029,deny)" user.altibase
projmod -a -K "project.max-shm-memory=(priv,4294967295,deny)" user.altibase
projmod -a -K "process.max-sem-nsems=(priv,2000,deny)" user.altibase
projmod -a -K "process.max-sem-ops=(priv,512,deny)" user.altibase
projmod -a -K "process.max-shm-ids=(priv,1,deny)" user.altibase

*** message queue 관련 파라미터 ***
projmod -a -K "process.max-msg-messages=(priv,100,deny)" user.altibase
projmod -a -K "project.max-msg-ids=(priv,100,deny)" user.altibase
projmod -a -K "process.max-msg-qbytes=(priv,1048576,deny)" user.altibase


수정하고자 하는 파라메터값 선택
projmod -s -K "project.max-sem-ids=(priv,값입력, deny)" user.altibase
projmod -s -K "project.max-shm-memory=(priv,값입력,deny)" user.altibase
projmod -s -K "process.max-sem-nsems=(priv,값입력,deny)" user.altibase
projmod -s -K "process.max-sem-ops=(priv,값입력,deny)" user.altibase
projmod -s -K "process.max-shm-ids=(priv,값입력,deny)" user.altibase

projmod -s -K "process.max-msg-messages=(priv,값입력,deny)" user.altibase
projmod -s -K "project.max-msg-ids=(priv,값입력,deny)" user.altibase
projmod -s -K "process.max-msg-qbytes=(priv,값입력,deny)" user.altibase


삭제하고자하는 파라메터값 선택
projmod -r -K "project.max-sem-ids =(priv,5029,deny)" user.altibase
projmod -r -K "project.max-shm-memory=(priv,4294967295,deny)" user.altibase
projmod -r -K "process.max-sem-nsems=(priv,2000,deny)" user.altibase
projmod -r -K "process.max-sem-ops=(priv,512,deny)" user.altibase
projmod -r -K "process.max-shm-ids=(priv,1,deny)" user.altibase

projmod -r -K "process.max-msg-messages=(priv,100,deny)" user.altibase
projmod -r -K "project.max-msg-ids=(priv,100,deny)" user.altibase
projmod -r -K "process.max-msg-qbytes=(priv,1048576,deny)" user.altibase

파라메터 적용 값 확인
# more /etc/project
# prctl -i project user.계정ID
# projects -l

삭제하고자 하는 프로젝트(계정ID)
# projdel  user.계정ID
# more /etc/project



# more /etc/project
system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::
user.oracle:100::::process.max-sem-nsems=(privileged,256,deny);project.max-shm-ids=(privileged,100,deny);project.max-shm-memory=(pri
vileged,4294967295,deny)
user.timesten:101::::process.max-file-descriptor=(privileged,8192,deny);process.max-msg-messages=(privileged,8192,deny);process.max-
msg-qbytes=(privileged,98304,deny);process.max-sem-nsems=(privileged,512,deny);project.max-msg-ids=(privileged,512,deny);project.max
-sem-ids=(privileged,512,deny);project.max-shm-ids=(privileged,512,deny);project.max-shm-memory=(priv,137438953472,deny)
user.authoper:102::::process.max-file-descriptor=(privileged,8192,deny);process.max-msg-messages=(privileged,8192,deny);process.max-
msg-qbytes=(privileged,98304,deny);project.max-msg-ids=(privileged,256,deny);project.max-sem-ids=(privileged,128,deny);project.max-s
hm-ids=(privileged,128,deny);project.max-shm-memory=(priv,4294967296,deny)

'솔라리스/리눅스' 카테고리의 다른 글

NDD 로 system value 변경  (0) 2012.02.08
Sun Solaris 커널 파라미터 설정  (0) 2012.01.19
SVM(Solaris Volume Manager) 간단 정리  (0) 2011.11.29
Solaris 10 hostname 변경  (0) 2011.11.24
솔라리스 리눅스화 시키기  (0) 2011.11.23