判断sem信号量为零_kernel.sem信号量调优

本文介绍了Linux系统中的kernel.sem信号量,包括其在Oracle数据库配置中的作用以及在Zabbix Agent中遇到的信号量不足问题。文章详细解析了`/proc/sys/kernel/sem`中的四个参数含义,并提供了查看、增加和清理信号量的方法。当信号量不足时,可以通过增加信号量值或删除无用信号量来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值