如何可靠地检查 mqueues 的使用情况?

如何可靠地检查 mqueues 的使用情况?

我运行一个软件测试服务器,该服务器依赖于大量使用队列(POSIX 消息队列)。我将限制增加到合理的水平,并在很久以前就开始工作了。然而,测试(及其 mqueues)的数量不断增加,并且测试在创建新 mqueues 时开始失败,尽管限制似乎并未耗尽。

$ cat /proc/sys/fs/mqueue/queues_max    # maximum mqueue count
65535
$ sudo mount -t mqueue none /mnt
$ ls -1 /mnt | wc -l                    # current mqueue count
8445
$ ulimit -q                             # maximum bytes in mqueues
819200
$ du -s /mnt                            # current mqueues size
0       /mnt

呼叫失败后mq_open()errno设置为 24,这意味着(根据/usr/include/asm-generic/errno-base.h):

#define EMFILE          24      /* Too many open files */

因此我检查了打开文件的限制,但似乎也没有耗尽。

$ ulimit -n                             # file descriptors limit
1024
$ lsof -u $(whoami) | wc -l             # currently open files
306

这些检查是否正确?还有什么我应该检查的吗?


我看过如何检查 ulimit 使用情况但使用检查似乎特定于特定限制,并且那里没有提到 mqueues。

由于 mqueues 的行为随着时间的推移而发生变化虫子,我的内核版本是4.1.13-rt15+.我自己使用适当的方法构建了内核实时补丁无需进一步修改。我最近没有切换内核(当问题开始出现时)。

相关内容