通俗来说什么是shmages?

通俗来说什么是shmages?

shmpages内核和内存术语的总体方案到底是什么。如果我达到了shmpages极限,那意味着什么?

我也很好奇这是否适用于 Linux 以外的其他地方

答案1

用户模式进程可以使用进程间通信(IPC)来相互通信,实现此目的最快的方法是使用共享内存页(shmpages)。
例如,如果banshee播放音乐和vlc播放视频,就会发生这种情况,两个进程都必须有权pulseaudio输出一些声音。

尝试使用以下一些命令来了解有关共享内存配置和使用的更多信息:

显示共享内存配置:

sysctl kernel.shm{max,all,mni}

默认情况下(Linux 2.6)应该输出:

kernel.shmmax = 33554432
kernel.shmall = 2097152
kernel.shmmni = 4096

shmmni是允许的共享内存段的最大数量,shmmax是共享内存段允许的大小 (32 MB),shmall是所有段的最大总大小(显示为页,转换为 8 GB)

当前使用的共享内存:

grep Shmem /proc/meminfo

如果由发行版启用:

ls -l /dev/shm

ipcs是了解有关 IPC 使用情况的更多信息的好工具:

ipcs -m 

会输出共享内存的使用情况,可以看到分配的相应大小的段。

ipcs -m -i <shmid>

显示有关指定段的更多信息,包括创建该段的进程 (cpid) 和最后一个使用该段的进程 (lpid) 的 PID。

ipcrm可以删除共享内存段(但请注意,只有在没有其他进程附加到这些段时,这些段才会被删除,请参阅 中的 nattach 列ipcs -m)。

ipcrm -m <shmid>

耗尽共享内存可能是一个程序大量使用大量共享内存,一个程序没有正确分离分配的段,修改了sysctl值,......

这不是 Linux 特有的,也适用于(大多数)UNIX 系统(共享内存首先出现在CBUNIX)。

相关内容