【IPC查询资源】
查看系统正在使用的IPC资源
[root@wzxaini9~~]#IPCs
----sharedmemorysegments------ sharedmemorysegments
keyshmidownerpermsbytesnattchstatus
------semaphore arrays------ semaphore arrays
keysemidownerpermsnsems
0x000000000229376Weber6001
----- -消息队列-----消息队列
kymsqidownerpermsused-bytes消息
单独查询IPC资源:
$ipcs -m显示系统使用的IPC共享内存资源
显示$ipcs -q系统使用的IPC队列资源
$ipcs -s显示系统使用的IPC信号量资源
确认IPC资源被谁占用
示例:需要查看是否有ipckey(51036 )被占用;
1、先用计算器转换成十六进制:
51036-c75c
2、如果知道共享内存被:占用
$ipcs-m|grepc75c
0x 0000 c 75 c 40403197 tdea 36665368709122
3、如果不知道,直接找:
$ipcs|grepc75c
0x 0000 c 75 c 40403197 tdea 36665368709122
0x0000c75c5079070tdea36664
【系统IPC参数查询】
[root@wzxaini9~~]#IPCs-l
------sharedmemorylimits------ sharedmemorylimits
maxnumberofsegments=4096
maxsegsize(kbytes )=4194303
maxtotalsharedmemory(kbytes )=1073741824
最小大小(bytes )=1
------semaphore limits------ semaphore limits
maxnumberofarrays=128
maxsemaphoresperarray=250
maxsemaphoressystemwide=32000
maxopspersemopcall=32
semaphoremaxvalue=32767
------- messages 3360 limits------------------消息3360 limits
maxqueuessystemwide=2048
maxsizeofmessage(bytes )=524288
defaultmaxsizeofqueue(bytes )=5242880
根据上述输出,目前该系统允许的最大内存为1073741824kb,最多可以使用128个信号量,每条消息的最大长度为524288字节;
【IPC系统参数的变更】
[ root @ wzx aini9~~] # cat/etc/sysctl.conf
单个消息的最大长度
kernel.msgmax=524288
#消息队列的最大字节数
#524288*10
kernel.msgmnb=5242880
最大消息队列数
kernel.msgmni=2048
#共享内存区域的最大字节数
kernel.shmmax=17179869184
#整个系统的共享存储器id的最大数量
kernel.shmmni=4096
#每个信号的最大信号数系统范围内的最大信号数每个信号支持的最大操作数系统范围内的最大信号数
#此参数是系统缺省参数,不需要更改
#kernel.sem=*
kernel.sem=2503200032128
显示没有标志的ipcs :的输出:
[root@wzxaini9~~]#IPCs
ipcstatusfrom/dev/memasofmonaug 1415336003360461989
TID
KEY MODE OWNER GROUPMessage Queues:
q 0 0x00010381 -Rrw-rw-rw- root system
q 65537 0x00010307 -Rrw-rw-rw- root system
q 65538 0x00010311 -Rrw-rw-rw- root system
q 65539 0x0001032f -Rrw-rw-rw- root system
q 65540 0x0001031b -Rrw-rw-rw- root system
q 65541 0x00010339--rw-rw-rw- root system
q 6 0x0002fe03 -Rrw-rw-rw- root system
Shared Memory:
m 65537 0x00000000 DCrw------- root system
m 720898 0x00010300 -Crw-rw-rw- root system
m 65539 0x00000000 DCrw------- root system
Semaphores:
s 131072 0x4d02086a --ra-ra---- root system
s 65537 0x00000000 --ra------- root system
s 1310722 0x000133d0 --ra------- 7003 30720
【清除IPC资源】
使用ipcrm 命令来清除IPC资源:这个命令同时会将与ipc对象相关联的数据也一起移除。当然,只有root用户,或者ipc对象的创建者才有这项权利;
ipcrm用法:
ipcrm -M shmkey 移除用shmkey创建的共享内存段
ipcrm -m shmid 移除用shmid标识的共享内存段
ipcrm -Q msgkey 移除用msqkey创建的消息队列
ipcrm -q msqid 移除用msqid标识的消息队列
ipcrm -S semkey 移除用semkey创建的信号
ipcrm -s semid 移除用semid标识的信号
清除当前用户创建的所有的IPC资源:
ipcs -q | awk '{ print "ipcrm -q "$2}' | sh > /dev/null 2>&1;
ipcs -m | awk '{ print "ipcrm -m "$2}' | sh > /dev/null 2>&1;
ipcs -s | awk '{ print "ipcrm -s "$2}' | sh > /dev/null 2>&1;
【综合应用】
查询user1用户环境上是否存在积Queue现象
1、查询队列Queue:
[root@wzxaini9 ~]# ipcs -q
------ Message Queues --------
key msqid owner perms used-bytes messages
0x49060005 58261504 user1 660 0 0
0x4f060005 58294273 user1 660 0 0
...
2、找出第6列大于0的服务:
[root@wzxaini9 ~]# ipcs -q |grep user1 |awk '{if($5>0) print $0}'
0x00000000 1071579324 user1 644 1954530 4826
0x00000000 1071644862 user1 644 1961820 4844
0x00000000 1071677631 user1 644 1944810 4802
0x00000000 1071710400 user1 644 1961820 4844