一、kernel.sem 信号量
sem其实是semaphores的缩写,这个在oracle数据库配置的时候,会需要调整该值,对于一般的程序来说基本是用不到的。不过现网中也遇到过个别主机上zabbix agent信号量不够用的情况。其对应的有四个参数,具体如下:
# cat /proc/sys/kernel/sem
250 32000 32 128
或者
# ipcs -ls
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
关于这四个参数的解释如下:
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 #信号集的最大值
二、查看、增加与清理
信号量不够的时候有两种处理方法,一种是通过增加信息的值,另一种方法是删除某些信号量。
1、查看信号量
查看当前使用信号量情况的方法如下:
# ipcs -a
------ Message Queues --------
key msqid owner perms used-bytes messages
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 0 zabbix 600 576 6 dest
0x00000000 32769 zabbix 600 3577056 6 dest
0x00000000 65538 zabbix 600 576 42 dest
0x00000000 98307 zabbix 600 16777216 42 dest
0x00000000 131076 zabbix 600 4194304 42 dest
0x00000000 163845 zabbix 600 4194304 42 dest
0x00000000 196614 zabbix 600 8388608 42 dest
0x00000000 229383 zabbix 600 12720 42 dest
0x00000000 262152 zabbix 600 8388608 42 dest
0x011434b6 20938761 root 600 1000 7
0x011434b9 20971530 root 600 1200712 7
0x00000000 557067 root 600 524288 2 dest
0x00000000 917516 root 600 524288 2 dest
0x00000000 17301517 root 600 524288 2 dest
0x00000000 1081359 root 600 16777216 2 dest
0x00000000 18808848 root 600 524288 2 dest
0x00000000 17432606 root 600 4194304 2 dest
------ Semaphore Arrays --------
key semid owner perms nsems
0x002fa327 65536 root 600 2
0x00000000 3407873 apache 600 1
0x00000000 3440642 apache 600 1
0x00000000 163843 apache 600 1
0x00000000 3473412 apache 600 1
0x00000000 3506181 apache 600 1
0x00000000 3538950 apache 600 1
0x00000000 3571719 apache 600 1
0x00000000 3604488 apache 600 1
这里输出的比较多,当然也可以只用ipcs -s只看信号量信息。
2、增加信号量
修改/etc/sysctl.conf文件,增加如下内容:
kernel.sem =5010 641280 5010 128
使用sysctl -p生效,这个会开机的时候自动生效,临时生效也可以使用如下方法:
echo "5010 641280 5010 128" > /proc/sys/kernel/sem
3、信号量的清理
信号量的清理使用ipcrm,具体如下:
//查看当前zabbix用户信号数量
# ipcs -a | grep zabbix | wc -l
90
//清理zabbix用户的所有信号量
# ipcs -a | grep zabbix| awk '{print $2}' | xargs -n1 ipcrm -s