最近使用信号量时,调用semget失败,通过strerror查看报错为No space left on device
要定位此问题,首先要知道一些系统命令
ipcs -m 查看系统共享内存信息
ipcs -q 查看系统消息队列信息
ipcs -s 查看系统信号量信息
cat /prc/sys/kernel/sem 或者ipcs -ls可查看当前系统支持的信号量信息
cat /proc/sys/kernel/sem
250 32000 32 128
250 SEMMSL max semaphores per array 信号集容纳最大信号数量
32000 SEMMNS max semaphores system wide 所有信号的最大数量
32 SEMOPM max ops per semop call 调用单个信号集中最大信号数量
128 SEMMNI max number of arrays 信号集的最大值
此处是创建信号量失败,所以只需查看ipcs -s即可,问题中用ipcs命令查看信号量数,发现被创建了128个,并且其支持的最信号量创建数为128,所以导致后续创建信号量失败
解决方案:
执行命令echo 32000 1024000000 500 32000 >/proc/sys/kernel/mem,将可创建的信号量最大值调大即可