前言
信号量是IPC(进程间通信)机制的一种,用于协调多个进程或线程对共享数据的读写操作,本质上是一个计数器。类似于锁,主要用于保护共享资源,控制同时访问资源的进程数。
信号量只允许调用者对它进行等待信号和发送信号操作。
信号量集指的是信号量的集合,即多个信号量组成的集合,可以同时控制多种资源的分配问题。
更具体的内容涉及linux系统编程,如有兴趣可查阅相关资料。
设置场景:db2数据库服务器有的库表能连,有的库表访问异常,基本确定数据没损坏,怀疑是系统信号量不够用
- 系统版本:centos 7
步骤
- 查看系统的信号量设置
cat /proc/sys/kernel/sem # 250 32000 32 128
- 第一列:250,SEMMSL,表示每个信号量集的最大信号量数目
- 第二列:32000,SEMMNI,表示系统范围内的最大信号量数目
- 第三列:32,SEMOPM,表示一个
semop
操作能调用的最大信号量数目 - 第四列:128,SEMMNS表示系统范围内的最大信号量集数目
- 查看系统已使用信号量集数目
ipcs -s | wc -l
- 如果已经超过128,或者在128附近,就要稍微调高点了。此处为临时设置,重启后失效。可以修改
/etc/sysctl.conf
文件进行固化。
# 设置信号量集数目为500 # 一次调用的最大信号量数目和信号量集内最大信号量数设置相等 # 系统最大信号量数目设置为 250 * 500 = 125000 sysctl -w kernel.sem="250 125000 250 500"