TASKCTL 是由多组件(执行ctlninfo就能看到主要的组件进程,通常是以ctl打头)共同协作完成调度功能的,除了服务端和代理端、服务端和客户端用的是基于TCP/IP的socket通信以外(由ctlnls负责);服务端或者代理端本身的组件间均是由消息队列和共享内存等机制完成的进程间的通信的。有部分情况操作系统本身IPC的消息队列配置是不够用的,所以本文主要点是 修改操作系统IPC的消息队列限制、查询IPC资源的开辟使用情况、删除开辟的IPC资源 等。
在此之前你应该学会查询当前IPC资源系统限制信息:
ipcs -l
ipcs -l 可以查看各个资源的系统限制信息,可以看到系统允许的最大信号量集及信号量个数限制、最大的消息队列中消息个数等信息。
如:
一、修改消息队列默认值
如果 'ipcs -l' 命令查询出来的 ----- Messages Limits -------- 栏 ,default max size of queue (bytes) 列的值 在 16384 这一数量级 也是就 万级,那么消息队列数通常就算太小了,我们建议进行如下修改:(如果默认数量级在这之上就不用在修改)
用 root 用户 在 /etc/sysctl.conf 中新增
kernel.msgmni=1600 kernel.msgmax=8192 kernel.msgmnb=1638400
msgmni 消息体的数量 缺省值为 16 上述修改建议为 1600
msgmax 单个消息的最大值 缺省值为 8192 上述修改建议为 8192
msgmnb 单个消息体的容量的最大值 缺省值为 16384 上述修改建议为 1638400
TASKCTL组件每次产生的消息默认应该是 512
然后执行 sysctl -p 生效,生效后执行 ipcs -l 确认是否生效。
注意:设置完毕后,只对新创建的消息队列等才有效,所以如果希望对TASKCTL节点生效,那么你需要重启该节点。
二、查询IPC资源的开辟使用情况
ipcs 命令用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。
语法
ipcs (选项)
选项
-a:显示全部可显示的信息;
-q:显示活动的消息队列信息;
-m:显示活动的共享内存信息;
-s:显示活动的信号量信息。
三、删除开辟的IPC资源
ipcrm 命令用来删除一个或更多的消息队列、信号量集或者共享内存标识
语法
ipcrm [ -m SharedMemoryID ] [ -M SharedMemoryKey ] [ -q MessageID ] [ -Q MessageKey ] [ -s SemaphoreID ] [ -S SemaphoreKey ]
选项
-m SharedMemory id 删除共享内存标识 SharedMemoryID。与 SharedMemoryID 有关联的共享内存段以及数据结构都会在最后一次拆离操作后删除。
-M SharedMemoryKey 删除用关键字 SharedMemoryKey 创建的共享内存标识。与其相关的共享内存段和数据结构段都将在最后一次拆离操作后删除。
-q MessageID 删除消息队列标识 MessageID 和与其相关的消息队列和数据结构。
-Q MessageKey 删除由关键字 MessageKey 创建的消息队列标识和与其相关的消息队列和数据结构。
-s SemaphoreID 删除信号量标识 SemaphoreID 和与其相关的信号量集及数据结构。
-S SemaphoreKey 删除由关键字 SemaphoreKey 创建的信号标识和与其相关的信号量集和数据结构。
msgctl、shmctl 和 semctl 子例程提供了删除操作的细节。标识和关键字可以用 ipcs 命令找到。
示例
如果要删除和 SharedMemoryID 18602 相关的共享内存段,请输入: ipcrm -m 18602
[最后编辑于 2020-01-09 16:19 ]
请登录后评论~