ipcs命令详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ipcs命令详解
多进程间通信常⽤的技术⼿段包括共享内存、消息队列、信号量等等,Linux系统下⾃带的ipcs命令是⼀个极好的⼯具,可以帮助我们查看当前系统下以上三项的使⽤情况,从⽽利于定位多进程通信中出现的通信问题。

⽬前也有⼀些帖⼦介绍ipcs命令的使⽤⽅法,但是介绍较简单不够全⾯,下⾯我根据个⼈的使⽤经验详细介绍下ipcs命令的使⽤⽅法。

ipcs -h可以查看该命令的使⽤帮助:
ipcs -a命令可以查看当前使⽤的共享内存、消息队列及信号量所有信息,对于该选项对应的结果,介绍以下⼏个部分:
1、信号量在创建时分信号量集和信号量的概念,该命令的查询结果中,Semaphore Arrays下⾯每⼀⾏代表⼀个信号量集,其中perms对应信号量集的权限,nsems对应信号量集中信号量的个数,对于信号量集的创建⽅法可以查询semctl相关的函数使⽤⽅法。

2、对于消息队列Message Queues⽽⾔,可以看到msqid对应创建队列时得到的id值,从messages中可以看到当前队列中存在的消息个数,从used_bytes中可以看到当前所有消息占⽤的字节数,所以单个消息的字节数则为总字节数除以消息数,同时如果消息个数不为零则说明消息队列中的消息没有得到及时处理,可以据此判断是否存在队列阻塞的风险。

ipcs -p命令可以得到与共享内存、消息队列相关进程之间的消息。

对于此选项,有如下介绍:
1、从该命令结果中可以看到Message Queues PIDs中的msqid既对应上条命令结果中的消息队列id,根据id则可以获取到lspid、lrpid消息,其中lspid代表最近⼀次向消息队列中发送消息的“进程号”,lrpid对应最近⼀次从消息队列中读取消息的“进程号”。

但请注意:此处的进程号是弱进程号,既它有可能代表的是线程号,如果进程中是起的线程对消息队列发送、接收消息,则此处pid对应的均是线程号。

可以采⽤ps -AL | grep pid来查找该线程对应的进程id。

ipcs -u命令可以查看各个资源的使⽤总结信息,其中可以看到使⽤的信号量集的个数、信号量的个数,以及消息队列中当前使⽤的消息个数总数、占⽤的空间字节数。

ipcs -l命令可以查看各个资源的系统限制信息,可以看到系统允许的最⼤信号量集及信号量个数限制、最⼤的消息队列中消息个数等信息。

1、从中可以看到以下信号量的限制信息,其中信号量集最⼤个数为128、每个信号量集中信号量最⼤个数为250、所有信号量最⼤个数为32000、每个信号量可以被同时调⽤的次数为32,这些参数是linux系统下的默认参数,对于限制参数也可以做⼀定程度的优化,会有⼀定程度上性能的提升,具体优化⽅法可以搜索相关帖⼦。

ipcs命令常⽤的功能已经做了较为详细的解释,如果还有不明⽩的地⽅我们⼀起探索。

---------------------
作者:axiaochong
来源:CSDN
原⽂:https:///dalongyes/article/details/50616162
版权声明:本⽂为博主原创⽂章,转载请附上博⽂链接!
ipcs
1. 命令格式
ipcs [resource-option] [output-format]
ipcs [resource-option] -i id
2. 命令功能
提供IPC设备的信息
3. 使⽤⽅法
 resource选项:
ipcs -m 查看系统共享内存信息
ipcs -q 查看系统消息队列信息
ipcs -s 查看系统信号量信息
ipcs [-a] 系统默认输出信息,显⽰系统内所有的IPC信息
[martin@localhost data]$ ipcs -a
------ Message Queues --------
key msqid owner perms used-bytes messages
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 229376 martin 600 4194304 2 dest
0x00000000 196609 martin 600 524288 2 dest
0x00000000 327682 martin 600 393216 2 dest
0x00000000 491525 martin 600 2097152 2 dest
------ Semaphore Arrays --------
key semid owner perms nsems
 输出格式控制:
ipcs -c 查看IPC的创建者和所有者
ipcs -l 查看IPC资源的限制信息
ipcs -p 查看IPC资源的创建者和使⽤的进程ID
ipcs -t 查看最新调⽤IPC资源的详细时间
ipcs -u 查看IPC资源状态汇总信息
[martin@localhost data]$ ipcs -u --human
------ Messages Status --------
allocated queues = 0
used headers = 0
used space = 0B
------ Shared Memory Status --------
segments allocated 4
pages allocated 1760
pages resident 339
pages swapped 0
Swap performance: 0 attempts 0 successes
------ Semaphore Status --------
used arrays = 0
allocated semaphores = 0
 额外格式控制:
ipcs -l --human
以⼈类可以阅读的⽅式显⽰size
[martin@localhost data]$ ipcs -l --human
------ Messages Limits --------
max queues system wide = 3644
max size of message = 8K
default max size of queue = 16K
------ Shared Memory Limits --------
max number of segments = 4096
max seg size = 16E
max total shared memory = 16E
min seg size = 1B
------ 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 = 3276
ipcrm
1. 命令功能
通过指定ID删除删除IPC资源,同时将与IPC对象关联的数据⼀并删除,只有超级⽤户或IPC资源创建者能够删除
2. 使⽤⽅法
ipcrm -M shmkey
移除⽤shmkey创建的共享内存段 ipcrm -m shmid
移除⽤shmid标识的共享内存段 ipcrm -S semkey
移除⽤semkey创建的信号量
ipcrm -s semid
移除⽤semid标识的信号量
ipcrm -Q msgkey
移除⽤msgkey创建的消息队列 ipcrm -q msgid
移除⽤msgid标识的消息队列。

相关文档
最新文档