POSIX 队列配置

Posted

技术标签:

【中文标题】POSIX 队列配置【英文标题】:POSIX Queue Configuration 【发布时间】:2014-03-14 13:12:50 【问题描述】:

我想知道如何在 linux 操作系统上配置 posix 队列。 我知道我可以在 sysctl.conf 和代码中编辑的方式

mq_open(**,**,**);

有没有其他方法可以配置每个队列的消息数和队列数。

【问题讨论】:

【参考方案1】:

您正在混合洋葱的不同层。

    在单个队列层,队列属性(mq_maxmsgmq_msgsize)在队列创建时是固定的,不能更改。 mq_curmsgs 更改没有任何意义,除非您希望破坏您的队列并且只能通过 mq_getattr 进行查询。 mq_flags 可以通过 mq_setattr` 更改,但唯一要更改的标志是切换队列的阻塞/非阻塞状态。

    实际上,编写简单的命令行实用程序来完成上述大部分操作很容易,许多组织已经拥有它们。它们通常是最早使用开发人员为自己编写的队列的程序之一。一些系统会将这些小实用程序合并到其应用程序的启动和关闭脚本中。

    在进程层,消息优先级 (MQ_PRIO_MAX) 和进程可以打开的队列数 (MQ_OPEN_MAX) 受到限制。在 linux 中,这些都不是真正的问题。最大优先级就像 32k - sysconf(_SC_MQ_PRIO_MAX) - 如果您使用这么多优先级,您就会遇到一些真正的设计问题。并且因为 linux 中的mqd_t 类型是文件描述符,所以打开队列数量的真正限制因素是进程受限的文件描述符总数。

    在系统级别,/proc/sys/fs/mqueue 中有限制文件,可以通过适当的权限进行更改。 (a) queues_max 是系统上允许的队列数量的上限,但一旦达到此限制,特权用户仍然可以创建队列。 (b) msgsize_max 是非特权进程创建的消息的最大消息大小。 (c) msg_max 是队列允许的最大消息大小。 (d) Linux 在/proc/sys/fs/mqueue 中还有两个文件msg_defaultmsgsize_default 应该是不言而喻的。

【讨论】:

以上是关于POSIX 队列配置的主要内容,如果未能解决你的问题,请参考以下文章

Posix消息队列

linux进程间通信之Posix消息队列

Posix消息队列

检查一条消息是不是在 POSIX 消息队列中而没有从队列中删除它?

尝试使用 POSIX 消息队列创建消息队列时权限被拒绝

POSIX消息队列