Linuxでは、msgsndはユーザー空間からメッセージを送信できます。ただし、送信されたメッセージ数が最大メッセージ数に達すると、msgsndはブロックされます。最大値を変更する方法はありますか?ありがとう
答え1
Linuxでは、IPCキュー容量はキューサイズ(バイト単位)によってのみ決定されます。メッセージ数に応じた容量はありません。使用されるキュー容量2つの方法があります:
次のいずれかの条件が該当する場合は、メッセージキューがいっぱいであると見なされます。
キューに新しいメッセージを追加すると、キューの合計バイト数がキューの最大サイズ(フィールド
msg_qbytes
)を超えます。キューに別のメッセージを追加すると、キュー内のメッセージの総数がキューの最大サイズ(フィールド
msg_qbytes
)を超えます。この確認は、長さゼロのメッセージが無制限にキューに入るのを防ぐために必要です。これらのメッセージにはデータは含まれていませんが、まだカーネルメモリを消費(ロック)します。
増やすには、msg_qbytes
次のものを使用できます。msgctl
、特権プロセス( CAP_SYS_RESOURCE
)から。次のコマンドを使用して、初期IPC名前空間の最大値を表示および設定できます。/proc/sys/kernel/msgmnb
。