为什么Sempaphores在Linux中受限

时间:2014-10-02 10:18:46

标签: linux semaphore

由于使用了太多的Websphere Message Broker实例或其他一些实例,我们的Linux机箱上的信号量用尽了。

一位同事,我想知道为什么这甚至是有限的 - 它只是一点点记忆,对吧?

我彻底用Google搜索,一无所获。

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

欢呼声

1 个答案:

答案 0 :(得分:3)

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

拥有一个可扩展的系统,其中动态分配每个新请求的信号量结构的内存会引入复杂性,从而减慢对它们的访问速度,因为它必须首先查找此时存储的特定信号量所在的位置,然后去获取存储它的内存并检查值。将它们保存在紧凑的固定存储器块中更容易,更快捷。

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

将限制作为可调参数(请参阅原始问题的注释中的链接)允许在运行时通过“昂贵的”重新分配和重新定位块来增加它。但通常这在系统初始化时完成一次,甚至在使用信号量之前也是如此。

也就是说,信号量集使用的内存量相当小。由于系统上的现代内存可用数千兆字节,因此对它们的数量的原始默认限制可能看起来有点吝啬。但请记住,在许多系统中,信号量很少被用户空间进程使用,并且Linux内核会进入大量内存相当有限的小型嵌入式系统,因此在可能使用的情况下将默认限制设置为任意高限似乎是浪费。

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