Linux
什麼是外行術語的 shmpages?
shmpages
核心和記憶體術語的宏偉計劃到底是什麼。如果我達到了shmpages
極限,那是什麼意思?我也很好奇這是否適用於 linux
使用者模式程序可以使用程序間通信 (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>
顯示有關指定段的更多資訊,包括創建程序的 PID (cpid) 和最後一個使用它的程序 (lpid)。
ipcrm
可以刪除共享記憶體段(但請注意,只有在沒有其他程序連接到它們時才會刪除這些段,請參閱 中的 nattach 列ipcs -m
)。ipcrm -m <shmid>
共享記憶體不足可能是一個程序大量使用大量共享記憶體,一個程序沒有正確分離分配的段,修改了
sysctl
值,……這不是 Linux 特定的,也適用於(大多數)UNIX 系統(共享記憶體首先出現在CB UNIX中)。