시스템의 메시지 큐를 코딩으로 관리할 수 있나요?
글쓴이: zxcvbnm / 작성시간: 일, 2003/08/24 - 3:54오후
안녕하세요.
서버쪽 프로그램을 막 시작한 허접초보가 메시지큐에 대해 몇 가지 질문 드립니다.
1. 큐의 설정이 기본 4096으로 설정되어 있는것 같은데 이런 설정은 어디에서 바꿔줘야하는지요?
2. 보통 큐의 크기는 또 어느정도로 하시는지...?
3. 또하나 큐가 overflow 되는 경우는 왜 생기는지 궁금합니다.
error 예) Resource temporarily unavailable
4. 그리고 이러한 설정을 코딩으로 설정 할 수 있는지도 궁금합니다.
선배님들 답변 좀 해주세요.
Forums:
제가 알기론 코딩으론 조정이 않될겁니다.썬의 경우는 /etc 밑의 무
제가 알기론 코딩으론 조정이 않될겁니다.
썬의 경우는 /etc 밑의 무슨 파일에 설정사항이 있습니다. 이 부분은 시스템 엔지니어에게 물어보시면 될겁니다.
가슴이 따뜻한 남자 이준용
[code:1]1. 큐의 설정이 기본 4096으로 설정되어 있는것 같
solaris를 예로 들면 /etc/system 파일에 설정이 가능합니다.
set msgsys:msginfo_msgmap=4096
set msgsys:msginfo_msgmax=65535
set msgsys:msginfo_msgmnb=2097152
set msgsys:msginfo_msgmni=4096
set msgsys:msginfo_msgssz=4096
set msgsys:msginfo_msgtql=20480
set msgsys:msginfo_msgseg=14336
와 같은 식으로 설정 하면 됩니다.
/etc/system 파일은 reboot후에 적용됩니다.
당연히 쓰기만 하고 읽어가지 않을 경우 발생합니다.
특히 queue의 overflow는 관련된 processes가 전부 작동이 멈추어서 위험합니다.
제가 아는 한도내에서는 없습니다.
>/dev/null 2>&1
[quote="dreampia"]당연히 쓰기만 하고 읽어가지 않을 경
flow control 메카니즘이 없기 때문입니다.
그래서, TCP를 사용하기도 합니다. socket은 소위 고급 IPC라고 지칭하지요.
TCP 는 양단간에 flow control메카니즘을 내장하고 있습니다.
즉, 커널내부에서 관리되는 수신버퍼가 가득차면, 송신을 위한 TCP프로토콜
스택이 사용자의 전송을 지연시킵니다(blocking)
그래서 소켓으로 프로그램하면 편한 상황이 많이 있습니다. 만일, 다른 IPC를
사용한다면, 상태검사하고, locking하고 난리를 펴야겠지요. 이렇게 만들는것도
방법이지만, 코드의 안정성등을 고려하면 그냥 소켓쓰는게 좋지요.
*참, UDP는 당연히 flow control도 없습니다. 그 외 고려사항이 많습니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
Re: 시스템의 메시지 큐를 코딩으로 관리할 수 있나요?
리눅스에서는 말이죠
1. 큐의 설정이 기본 4096으로 설정되어 있는것 같은데 이런 설정은 어디에서 바꿔줘야하는지요?
-> /etc/sysctl.conf 파일에 kernel.msgmnb = 65536 를 추가해서 sysctl -p 때려주면 리부팅 없이 사용할수 있습니다.
2. 보통 큐의 크기는 또 어느정도로 하시는지...?
-> 메세지큐는 real memory 만 사용합니다. 그래서, real memory 보다 작게 해주면 되고요, 플랫폼에 따라서 달라집니다.
댓글 달기