Linux에서 mq_open()시에 ENOMEM 조치 방법을 알고 싶습니다.

dreampia의 이미지


struct mq_attr qattr;

qattr.mq_maxmsg = 120;
qattr.mq_msgsize = 16072;

mq_open(.., .., .., &qattr);
mq_open(.., .., .., &qattr);
mq_open(.., .., .., &qattr);
mq_open(.., .., .., &qattr);
mq_open(.., .., .., &qattr);

위와 같이 호출하면 시작하자마자 errno==12(ENOMEM) 에러가 발생합니다.
mq_maxmsg = 10;으로 하면 중간쯤에서 mq_maxmsg = 1; 로 하면 에러없이 잘 넘어가구요..

어디선가 POSIX 메시지 큐에 대한 size를 제한 하고 있는 것 같은데
어떤 값들을 확인해 봐야 할까요?

/proc/sys/fs/mqueue에서 msg_max=120, msgsize_max=16384, queues_max=256으로 세팅했습니다.

익명 사용자의 이미지

dreampia의 이미지


집에서 푹 자고 나서 생각해 보니 QUEUE size였고..

제한은 limits.conf에서였는데..

그래서 /etc/security/limits.conf 에서 msgqueue 크기를 엄청크게 늘려놨더니 잘 생성되네요.

>/dev/null 2>&1