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>
セグメントを生成したプロセスのPID(cpid)と、セグメントを使用した最後のプロセス(lpid)を含む、指定されたセグメントに関する追加情報を表示します。
ipcrm
共有メモリセグメントは削除できます(ただし、これらのセグメントは他のプロセスが接続されていない場合にのみ削除されます。nattach列を参照ipcs -m
)。
ipcrm -m <shmid>
共有メモリを使い果たすことは、大量の共有メモリを過度に使用するプログラム、割り当てられたセグメントを正しく分離しないプログラム、sysctl
値の変更などです。
これはLinuxに限定されず、ほとんどの場合、UNIXシステムにも適用されます(共有メモリはシブニックス)。