为什么Sempaphores在Linux中受到限制

由于使用了太多的Websphere Message Broker实例或者其他类型,我们只是在Linux机器上耗尽了信号量。

一位同事和我不禁想知道为什么这个问题甚至有限 - 这只是一点点的记忆,对吧?

我彻底搜索了一下,没有发现任何东西。

任何人都知道这是为什么?

干杯


信号量在使用时需要频繁访问,且开销非常低。

有一个可扩展的系统,其中每个新请求的信号量结构的内存在运行中分配会引入复杂度,这会降低对它们的访问速度,因为它必须首先查找当前所讨论的特定信号量的存储位置,然后进行提取存储它的地方并检查值。 将它们保存在一个随时可用的固定存储器的紧凑块中会更容易,更快速。

让它们通过动态分配分散在整个内存中也会使得更有效地使用被锁定的内存页面(即,当内存要求很高时不会被交换出去)更加困难。 内核数据的“锁定”内存页的使用对时间敏感和/或关键内核功能尤为重要。

限制为可调参数(请参阅原始问题的注释中的链接),如果需要,可以在运行时通过“昂贵”重新分配和重新定位块来增加限制。 但是,通常在系统初始化之前这样做是在使用信号量之前进行的。

也就是说,信号集使用的内存量非常小。 随着系统中现代内存的可用容量达到千兆字节,其数量的原始默认限制看起来可能有点吝啬。 但请记住,在很多系统中信号量很少被用户空间进程使用,并且linux内核可以进入许多小型嵌入式系统,而且内存相当有限,因此将默认限制设置为任意高以免使用可能会造成浪费。

少数软件包(例如Oracle数据库)依赖于可用的许多信号量,通常在其安装和/或系统调整建议中建议增加系统限制。

链接地址: http://www.djcxy.com/p/22927.html

上一篇: Why are Sempaphores limited in Linux

下一篇: How to set the UserTokenProvider token expiration