鍍金池/ 教程/ Linux/ ipcs 查詢進(jìn)程間通信狀態(tài)
進(jìn)程管理工具
objdump 二進(jìn)制文件分析
scp 跨機(jī)遠(yuǎn)程拷貝
crontab 定時(shí)任務(wù)
readelf elf文件格式分析
pstack 跟蹤進(jìn)程棧
系統(tǒng)管理及IPC資源管理
vmstat 監(jiān)視內(nèi)存使用情況
strace 跟蹤進(jìn)程中的系統(tǒng)調(diào)用
sar 找出系統(tǒng)瓶頸的利器
ipcs 查詢進(jìn)程間通信狀態(tài)
ps 進(jìn)程查看器
性能優(yōu)化
wget 文件下載
top linux下的任務(wù)管理器
磁盤管理
size 查看程序內(nèi)存映像大小
free 查詢可用內(nèi)存
文件及目錄管理
iostat 監(jiān)視I/O子系統(tǒng)
性能監(jiān)控
程序構(gòu)建
學(xué)會使用命令幫助
gdb 調(diào)試?yán)?/span>
網(wǎng)絡(luò)工具
nm 目標(biāo)文件格式分析
lsof 一切皆文件
用戶管理工具
程序調(diào)試
ldd 查看程序依賴庫
文本處理

ipcs 查詢進(jìn)程間通信狀態(tài)

ipcs是Linux下顯示進(jìn)程間通信設(shè)施狀態(tài)的工具??梢燥@示消息隊(duì)列、共享內(nèi)存和信號量的信息。對于程序員非常有用,普通的系統(tǒng)管理員一般用不到此指令。

IPC資源查詢

查看系統(tǒng)使用的IPC資源

$ipcs

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x00000000 229376     weber      600        1         

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    

分別查詢IPC資源

$ipcs -m 查看系統(tǒng)使用的IPC共享內(nèi)存資源
$ipcs -q 查看系統(tǒng)使用的IPC隊(duì)列資源
$ipcs -s 查看系統(tǒng)使用的IPC信號量資源

查看IPC資源被誰占用

示例:有個(gè)IPCKEY(51036),需要查詢其是否被占用;

  1. 首先通過計(jì)算器將其轉(zhuǎn)為十六進(jìn)制
    51036 -> c75c
  1. 如果知道是被共享內(nèi)存占用
    $ipcs -m | grep c75c
    0x0000c75c 40403197   tdea3    666        536870912  2
  1. 如果不確定,則直接查找
    $ipcs | grep c75c
    0x0000c75c 40403197   tdea3    666        536870912  2
    0x0000c75c 5079070    tdea3    666        4

系統(tǒng)IPC參數(shù)查詢

 ipcs -l

 ------ Shared Memory Limits --------
 max number of segments = 4096
 max seg size (kbytes) = 4194303
 max total shared memory (kbytes) = 1073741824
 min seg size (bytes) = 1

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

 ------ Messages: Limits --------
 max queues system wide = 2048
 max size of message (bytes) = 524288
 default max size of queue (bytes) = 5242880

以上輸出顯示,目前這個(gè)系統(tǒng)的允許的最大內(nèi)存為1073741824kb;最大可使用128個(gè)信號量,每個(gè)消息的最大長度為524288bytes;

修改IPC系統(tǒng)參數(shù)

以linux系統(tǒng)為例,在root用戶下修改/etc/sysctl.conf 文件,保存后使用sysctl -p生效

 $cat /etc/sysctl.conf
 # 一個(gè)消息的最大長度
 kernel.msgmax = 524288

 # 一個(gè)消息隊(duì)列上的最大字節(jié)數(shù)
 # 524288*10
 kernel.msgmnb = 5242880

 #最大消息隊(duì)列的個(gè)數(shù)
 kernel.msgmni=2048

 #一個(gè)共享內(nèi)存區(qū)的最大字節(jié)數(shù)
 kernel.shmmax = 17179869184

 #系統(tǒng)范圍內(nèi)最大共享內(nèi)存標(biāo)識數(shù)
 kernel.shmmni=4096

 #每個(gè)信號燈集的最大信號燈數(shù) 系統(tǒng)范圍內(nèi)最大信號燈數(shù) 每個(gè)信號燈支持的最大操作數(shù) 系統(tǒng)范圍內(nèi)最大信號燈集數(shù)
 #此參數(shù)為系統(tǒng)默認(rèn),可以不用修改
 #kernel.sem = <semmsl> <semmni>*<semmsl> <semopm> <semmni>
 kernel.sem = 250 32000 32 128

顯示輸入不帶標(biāo)志的 ipcs:的輸出

$ipcs
IPC status from /dev/mem as of Mon Aug 14 15:03:46 1989
T    ID         KEY        MODE       OWNER     GROUP
Message 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資源:這個(gè)命令同時(shí)會將與ipc對象相關(guān)聯(lián)的數(shù)據(jù)也一起移除。當(dāng)然,只有root用戶,或者ipc對象的創(chuàng)建者才有這項(xiàng)權(quán)利;

ipcrm用法

ipcrm -M shmkey  移除用shmkey創(chuàng)建的共享內(nèi)存段
ipcrm -m shmid    移除用shmid標(biāo)識的共享內(nèi)存段
ipcrm -Q msgkey  移除用msqkey創(chuàng)建的消息隊(duì)列
ipcrm -q msqid  移除用msqid標(biāo)識的消息隊(duì)列
ipcrm -S semkey  移除用semkey創(chuàng)建的信號
ipcrm -s semid  移除用semid標(biāo)識的信號

清除當(dāng)前用戶創(chuàng)建的所有的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;

綜合應(yīng)用

查詢user1用戶環(huán)境上是否存在積Queue現(xiàn)象

  1. 查詢隊(duì)列Queue
    $ipcs -q

    ------ Message Queues --------
    key        msqid      owner      perms      used-bytes   messages    
    0x49060005 58261504   user1    660        0            0           
    0x4f060005 58294273   user1    660        0            0          
    ...
  1. 找出第6列大于0的服務(wù)
    $ 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