kernel.sem信号量调优

2018年3月20日 发表评论 阅读评论

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




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: Linux/unix/mac 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.