시스템의 메시지 큐를 코딩으로 관리할 수 있나요?

zxcvbnm의 이미지

안녕하세요.
서버쪽 프로그램을 막 시작한 허접초보가 메시지큐에 대해 몇 가지 질문 드립니다.

1. 큐의 설정이 기본 4096으로 설정되어 있는것 같은데 이런 설정은 어디에서 바꿔줘야하는지요?

2. 보통 큐의 크기는 또 어느정도로 하시는지...?

3. 또하나 큐가 overflow 되는 경우는 왜 생기는지 궁금합니다.
error 예) Resource temporarily unavailable

4. 그리고 이러한 설정을 코딩으로 설정 할 수 있는지도 궁금합니다.

선배님들 답변 좀 해주세요.

juneyl의 이미지

제가 알기론 코딩으론 조정이 않될겁니다.
썬의 경우는 /etc 밑의 무슨 파일에 설정사항이 있습니다. 이 부분은 시스템 엔지니어에게 물어보시면 될겁니다.

가슴이 따뜻한 남자 이준용

dreampia의 이미지

1. 큐의 설정이 기본 4096으로 설정되어 있는것 같은데 이런 설정은 어디에서 바꿔줘야하는지요? 

solaris를 예로 들면 /etc/system 파일에 설정이 가능합니다.

msginfo_msgmap  100   message map의 entry 수 
msginfo_msgmax  2048  message size의 최대값 
msginfo_msgmnb  4096  queue의 최대 byte 수 
msginfo_msgmni  50    message queue identifier의 갯수 
msginfo_msgssz  8     message의 segment size로 반드시 word size의 곱이되어야 함. 
msginfo_msgtql  40    system message header의 갯수 
msginfo_msgseq  1024  message segment의 갯수로 32768 보다 작아야함. 

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후에 적용됩니다.

2. 보통 큐의 크기는 또 어느정도로 하시는지...? 

3. 또하나 큐가 overflow 되는 경우는 왜 생기는지 궁금합니다. 
error 예) Resource temporarily unavailable 

당연히 쓰기만 하고 읽어가지 않을 경우 발생합니다.
특히 queue의 overflow는 관련된 processes가 전부 작동이 멈추어서 위험합니다.

4. 그리고 이러한 설정을 코딩으로 설정 할 수 있는지도 궁금합니다. 

제가 아는 한도내에서는 없습니다.

>/dev/null 2>&1

mach의 이미지

dreampia wrote:

당연히 쓰기만 하고 읽어가지 않을 경우 발생합니다.
특히 queue의 overflow는 관련된 processes가 전부 작동이 멈추어서 위험합니다.

flow control 메카니즘이 없기 때문입니다.
그래서, TCP를 사용하기도 합니다. socket은 소위 고급 IPC라고 지칭하지요.
TCP 는 양단간에 flow control메카니즘을 내장하고 있습니다.
즉, 커널내부에서 관리되는 수신버퍼가 가득차면, 송신을 위한 TCP프로토콜
스택이 사용자의 전송을 지연시킵니다(blocking)
그래서 소켓으로 프로그램하면 편한 상황이 많이 있습니다. 만일, 다른 IPC를
사용한다면, 상태검사하고, locking하고 난리를 펴야겠지요. 이렇게 만들는것도
방법이지만, 코드의 안정성등을 고려하면 그냥 소켓쓰는게 좋지요.
*참, UDP는 당연히 flow control도 없습니다. 그 외 고려사항이 많습니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

frowt의 이미지

리눅스에서는 말이죠

1. 큐의 설정이 기본 4096으로 설정되어 있는것 같은데 이런 설정은 어디에서 바꿔줘야하는지요?
-> /etc/sysctl.conf 파일에 kernel.msgmnb = 65536 를 추가해서 sysctl -p 때려주면 리부팅 없이 사용할수 있습니다.

2. 보통 큐의 크기는 또 어느정도로 하시는지...?
-> 메세지큐는 real memory 만 사용합니다. 그래서, real memory 보다 작게 해주면 되고요, 플랫폼에 따라서 달라집니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.