ipcs命令详解

  

基础命令学习目录首页html

 

多进程间通讯经常使用的技术手段包括共享内存、消息队列、信号量等等,Linux系统下自带的ipcs命令是一个极好的工具,能够帮助咱们查看当前系统下以上三项的使用状况,从而利于定位多进程通讯中出现的通讯问题。目前也有一些帖子介绍ipcs命令的使用方法,可是介绍较简单不够全面,下面我根据我的的使用经验详细介绍下ipcs命令的使用方法。
ipcs -h能够查看该命令的使用帮助:

 

ipcs -a命令能够查看当前使用的共享内存、消息队列及信号量全部信息,对于该选项对应的结果,介绍如下几个部分:
一、信号量在建立时分信号量集和信号量的概念,该命令的查询结果中,Semaphore Arrays下面每一行表明一个信号量集,其中perms对应信号量集的权限,nsems对应信号量集中信号量的个数,对于信号量集的建立方法能够查询semctl相关的函数使用方法。
二、对于消息队列Message Queues而言,能够看到msqid对应建立队列时获得的id值,从messages中能够看到当前队列中存在的消息个数,从used_bytes中能够看到当前全部消息占用的字节数,因此单个消息的字节数则为总字节数除以消息数,同时若是消息个数不为零则说明消息队列中的消息没有获得及时处理,能够据此判断是否存在队列阻塞的风险。

 

ipcs -p命令能够获得与共享内存、消息队列相关进程之间的消息。对于此选项,有以下介绍:
一、从该命令结果中能够看到Message Queues PIDs中的msqid既对应上条命令结果中的消息队列id,根据id则能够获取到lspid、lrpid消息,其中lspid表明最近一次向消息队列中发送消息的“进程号”,lrpid对应最近一次从消息队列中读取消息的“进程号”。但请注意:此处的进程号是弱进程号,既它有可能表明的是线程号,若是进程中是起的线程对消息队列发送、接收消息,则此处pid对应的均是线程号。能够采用ps -AL | grep pid来查找该线程对应的进程id。

 

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

 

ipcs -l命令能够查看各个资源的系统限制信息,能够看到系统容许的最大信号量集及信号量个数限制、最大的消息队列中消息个数等信息。
一、从中能够看到如下信号量的限制信息,其中信号量集最大个数为12八、每一个信号量集中信号量最大个数为250、全部信号量最大个数为32000、每一个信号量能够被同时调用的次数为32,这些参数是linux系统下的默认参数,对于限制参数也能够作必定程度的优化,会有必定程度上性能的提高,具体优化方法能够搜索相关帖子。
ipcs命令经常使用的功能已经作了较为详细的解释,若是还有不明白的地方咱们一块儿探索。
---------------------
做者:axiaochong
来源:CSDN
原文:https://blog.csdn.net/dalongyes/article/details/50616162
版权声明:本文为博主原创文章,转载请附上博文连接!

ipcs

1. 命令格式linux

  ipcs [resource-option] [output-format]
  ipcs [resource-option] -i idapp

2. 命令功能ide

  提供IPC设备的信息函数

3. 使用方法
工具

 resource选项:post

  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标识的消息队列

相关文章
相关标签/搜索