Linux에서는 msgsnd가 사용자 공간에서 메시지를 보낼 수 있습니다. 그런데 전송된 메시지 수가 최대 메시지 수에 도달하면 msgsnd가 차단됩니다. 최대값을 변경할 수 있는 방법이 있나요? 감사해요
답변1
Linux에서 IPC 대기열 용량은 대기열 크기(바이트)에 의해서만 결정됩니다. 메시지 수에 따른 별도의 용량은 없습니다. 사용된 대기열 용량두 가지 방법이 있습니다:
다음 조건 중 하나라도 해당되면 메시지 대기열이 가득 찬 것으로 간주됩니다.
대기열에 새 메시지를 추가하면 대기열의 총 바이트 수가 대기열의 최대 크기(필드
msg_qbytes
)를 초과하게 됩니다.대기열에 다른 메시지를 추가하면 대기열의 총 메시지 수가 대기열의 최대 크기(필드
msg_qbytes
)를 초과하게 됩니다. 이 확인은 길이가 0인 메시지가 무제한으로 대기열에 들어가는 것을 방지하는 데 필요합니다. 이러한 메시지에는 데이터가 포함되어 있지 않지만 여전히 커널 메모리를 소비(잠금)합니다.
늘리려면 msg_qbytes
다음을 사용할 수 있습니다.msgctl
, 권한 있는 프로세스( CAP_SYS_RESOURCE
)에서. 다음 명령을 사용하여 초기 IPC 네임스페이스의 최대값을 보고 설정할 수 있습니다./proc/sys/kernel/msgmnb
.