메시지 큐에 관련한 질문입니다.(Queue full??)

bejoy4him의 이미지

메시지 큐를 이용한 멀티 쓰레드 프로그램을 작성하고 있습니다. 큐에서 recv하는 쓰레드가 잘못되었는지 한동안 잘 돌다가 블럭이 걸립니다. 그래서 혹시나 하는 마음에 recv하는 프로그램을 만들어서 돌리니 메시지 큐에 걸렸던 블럭이 해제되었습니다.

뭐... 증상을 보아하니 Queue Full인것 같기는한데.... ipcs -qa 명령을 사용해서 큐상태를 보면 Queue Full이 아닌것 처럼 보입니다.

Quote:
cpteam :~/call_proc/cp_pkg/lnk_out/pjw>ipcs -qa
IPC status from <running system> as of 2004년 9월 14일 화요일 오전 08시 27분 37초
T ID KEY MODE OWNER GROUP CREATOR CGROUP CBYTES QNUM QBYTES LSPID
LRPID STIME RTIME CTIME
Message Queues:
q 212670 0x2712 -Rrw-rw-rw- cpteam other cpteam other 0 0 40960000
0 0 no-entry no-entry 12:22:50
q 212161 0x3a9a -Rrw-rw-rw- cpteam other cpteam other 0 0 40960000 2737
7 27377 20:01:58 20:01:58 12:22:50
q 212162 0x4e22 --rw-rw-rw- cpteam other cpteam other 310264 10823 40960000 2737
7 27377 20:01:58 12:24:12 12:22:50
q 212163 0x61aa -Rrw-rw-rw- cpteam other cpteam other 0 0 40960000 2737

제 짧은 지식으로는 아직 큐에 공간이 남아있는듯 한데...
큐에 들어갈수 있는것은 전체 바이트 수 뿐만이 아니라 count에도 제한이 있는것인지 궁금합니다.

익명 사용자의 이미지

일단 님께서 작성하신 플에서 wait가 걸리는 이유는
msgsnd()에서 Lock이 걸려있어서 입니다.
Lock이 걸리는 이유는 당연히 msgrcv()를 하지 안했기 때문이겠죠.
또한 msgrcv()를 하지 못한 이유는 여러가지가 있겠지요.

msgsnd()에서 Lock를 피하기 위하여
IPC_NOWAIT 옵션을 사용하기도 하지만
그에 따라서 체크해야 할 상황이 많이도 발생할테구요.

님께서 궁금하신 메시지 FULL문제는 다음과 같습니다.

/proc/sys/kernel 에 보면 다음의 특수파일이 있습니다.

Quote:

msgmax : 프로세스 <--> 프로세스로 보내질 수 있는 최대 메시지 사이즈
msgmnb : 하나의 메시지 큐에서의 최대 바이트 수
msgmni : 최대 메시지 큐 식별자의 수

기본으로 msgmni 는 16이 지정되어 있습니다.
msgrcv()가 한순간이라도 정상작동하지 않는다면
16이라는 메시지 큐 수는 모두 차버릴 것입니다.

이상 허접 대답입니다.

bejoy4him의 이미지

답변 감사합니다.

일단 제가 보기에도 recv쪽에서 제대로 동작하지 못하여 블럭이 걸린것으로 보입니다.
문제는 왜 Full이 아닌것 같은데.. 블럭이 걸리는가 하는것이죠....
제대로 읽어가지 못해도 큐가 full이 되기전까진 send가 제대로 수행될듯 보이는데...

그리고 KLDP에다가 솔라리스에 관련된 질문을 하는것 자체가 맞지 않지만...
일단 서버가 솔라리스라서 도움주신 파일들은 찾아볼수가 없네요....

mr.hjkim의 이미지

메시지 큐에는 여러가지 제한 사항이 있습니다.

한 메시지의 최대 크기, 메시지 큐에 들어갈 수 있는 최대 메시지 개수,
현재 메시지큐(시스템에 존재하는 모든 메시지큐)에 존재하는 총 메시지 수,
총 메시지 바이트수등의 제한이 있습니다.
그래서 ipcs -qob를 이용하여 다른 메시지 큐에 쌓여 있는 메시지가 있는지 확인해보시기 바랍니다.

아마도 sun에는 sysdef라는 명령어가 있었던거 같은데 확인해보시기 바랍니다.

dreampia의 이미지

Solaris에서는 /etc/system 파일에 설정을 할수 있습니다.

set msgsys:msginfo_msgmap=512
set msgsys:msginfo_msgmax=65535
set msgsys:msginfo_msgmnb=1048560
set msgsys:msginfo_msgmni=2100
set msgsys:msginfo_msgssz=1024
set msgsys:msginfo_msgtql=10240
set msgsys:msginfo_msgseg=14336

이런식으로요..
저같은 경우는 Message Queues를 무진장 쓰거든요.

msgmax : 프로세스 <--> 프로세스로 보내질 수 있는 최대 메시지 사이즈 
msgmnb : 하나의 메시지 큐에서의 최대 바이트 수 
msgmni : 최대 메시지 큐 식별자의 수 

이것들 setting한거 다 보이시죠.. ^^;

>/dev/null 2>&1

bejoy4him의 이미지

모두들 정말 감사합니다.

메시지 큐에 조정에 대해서 모르는 부분이 많았었는데 이번 기회에 여러가지 알게된것 같습니다.

우선 문제가 되었던 부분은 큐에 메시지 갯수가 너무 많이 쌓여서 그렇게 된것이었습니다.
msgtql이 20000으로 설정되어있었는데... 큐에 쌓여있는 메시지를 전부 더해보니 19999개나 되었습니다. 메시지 카운트때문에 블럭이 걸린것이었죠..

혹시 모를 다른 분을 위해 다음 글을 인용합니다.

Quote:
MSGMNB
Maximum number of bytes per message queue.

MSGMNI
Maximum number of message queue identifiers (system wide).

MSGSEG
Maximum number of message segments per queue.

MSGSSZ
Size of a message segment.

MSGTQL
Maximum number of messages (system wide).

MSGMAX
Maximum size of a whole message. On some systems you may need to increase this limit. On other systems, you may not be able to change it.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.