ipcs作用
查看当前系统共享内存、消息队列、信号量的使用情况,利于定位多进程通信中出现的通信问题。
ipcs 命令格式
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
-l命令可以查看各个资源的系统限制信息,可以看到系统允许的最大信号量集及信号量个数限制、最大的消息队列中消息个数等信息。
1、从中可以看到以下信号量的限制信息,其中信号量集最大个数为128、每个信号量集中信号量最大个数为250、所有信号量最大个数为32000、每个信号量可以被同时调用的次数为32,这些参数是linux系统下的默认参数,对于限制参数也可以做一定程度的优化,提升系统性能。
ipcrm
格式:ipcrm [ -M key | -m id | -Q key | -q id
| -S key | -s id ]
1.ipcrm命令用来删除ipc相关的数据信息的,但是删除操作必须得是超级用户或者具有对ipc相应的权限才可以。
2.ipcrm可删除三种类型的ipc:共享内存、信号量、消息队列
3.删除消息队列或信号量时是立即生效的,而删除共享内存时,需引用共享内存的进程已经释放了共享内存才会生效