【发布时间】:2014-03-18 04:27:08
【问题描述】:
在我的应用程序中,我有不同的模块通过 posix 队列进行通信,问题是当限制满足时我得到上述错误,我在两个中都设置了限制
sysctl fs.file-max = new_value
和
ulimit -n
但这是一些硬编码的值,是否有任何最佳实践来克服这个问题?我尝试通过mq_close 关闭描述符,但应用程序中的所有模块都可以随时使用任何消息。所以我无法关闭所有描述符。
【问题讨论】:
-
您可能没有达到总文件描述符限制,而是达到了消息队列数量的限制,这种情况也将返回 ENFILE。前几天你问了一个关于这个的问题。您是否增加了允许的 MQ 数量?
-
是的,我按照建议做了,但仍然出现错误,我正在寻找解决方法。
-
目前我正在制作和处理程序,它将保留所有队列描述符并且仅在需要时打开。但这不是一个好方法,对吧?
-
(1) 您采取了哪些步骤? (2) 目前的限制是什么? (3) 您的应用程序/系统使用了多少个队列?如果在此期间没有人帮忙,明天会尝试接机。
-
您是否打开或打开大量文件?打开有一个限制,比如 254,但打开的限制要高得多。如果队列实现使用 open,它可能会碰到这个。