为什么Sempaphores在Linux中受限

由于使用了太多的Websphere Message broker实例或者某些东西,我们的 Linux机箱上的信号量用完了.

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

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

谁知道为什么会这样?

干杯

解决方法

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

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

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

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

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

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

相关文章

Linux中的ARP防火墙主要用于防御ARP欺骗攻击,其效果取决于多...
insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...