如何使用IPCS命令检查Linux共享内存

时间:2020-03-05 15:26:15  来源:igfitidea点击:

共享内存是可以由多个进程访问的内存;例如:可以在不同进程之间共享的存储区域和在两个过程之间传递数据的更好方法。
共享内存是当前可用的流程间通信的最快形式。

假设程序将创建一个存储部分,另一个进程可以访问(如果允许)。
共享段可以通过相同的过程多次添加。
每当存储器被映射到过程的地址空间时,例如:共享公共存储区域,内核将不涉及在进程之间传递数据。
许多应用程序,如Oracle SGA需要共享内存设置,请使用此功能。

让我们通过一些示例查看一些IPCS命令。

使用"-m""选项打印活动共享内存段。

其中:

"Dest"状态意味着内存段被标记为被销毁的"NAGTACH"字段显示有多少应用程序PID仍然添加到共享内存中

# ipcs -m
------ Shared Memory Segments -------
key shmid owner perms bytes nattch status
0x00000000 65536 root 600 393216 2 dest
0x00000000 98305 root 600 393216 2 dest

以下命令打印有关活动共享内存段的信息:

# ipcs -q
------ Message Queues -------
key msqid owner perms used-bytes messages

打印有关活动共享内存队列的信息:

# ipcs -s
------ Semaphore Arrays -------
key semid owner perms nsems

打印有关可访问信号量的信号量的信息。
IPCS -L显示共享内存,信号量和消息的限制。

# 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 = 16
max size of message (bytes) = 65536
default max size of queue (bytes) = 65536

以下命令显示Linux进程可以在其虚拟地址空间中分配的单个内存段的最大大小。
我们可以通过执行以下命令来限制单个内存段的最大大小。

# cat /proc/sys/kernel/shmmax
4294967295

我们可以通过回应有关/proc文件,设置SHMMAX值。

以下命令将设置最大大小(以字节为单位)单个内存段设置为8388698:

# echo 8388608 > /proc/sys/kernel/shmmax

以类似的方式,我们可以在系统V IPC消息队列中设置任何单个消息的最大允许大小,以字节为单位。

[root@localhost kernel]# echo 8192 > /proc/sys/kernel/msgmax

我们可以使用以下命令检查信号量的当前内核参数。

# cat /proc/sys/kernel/sem
250 32000 32 128
where
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