
共有メモリは、複数のプロセスがアクセスできるメモリです。つまり、異なるプロセス間で共有できるメモリ領域と、2つのプロセス間でデータを渡すためのより良い方法です。共有メモリは、現在利用可能なプロセス間通信の最速の形式です。
プログラムがメモリ部分を作成し、別のプロセスがアクセスできると仮定します(許可されている場合)。共有セグメントは、同じプロセスで複数回接続できます。メモリがプロセスのアドレス空間にマップされるとき、つまり共通のメモリ領域を共有するときはいつでも、カーネルはプロセス間でデータを渡すときに関与しません。 Oracle SGAなどの多くのアプリケーションでは、共有メモリ設定が必要です。
いくつかの例を通して、いくつかのIPCSコマンドを確認してみましょう。
-m
を使用してアクティブな共有メモリセグメントを印刷します オプション。
ここで、
「宛先」ステータスは、メモリセグメントが破棄済みとしてマークされていることを意味します
「nattach」フィールドには、共有メモリにまだ接続されているアプリケーション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
同様の方法で、SystemVIPCメッセージキュー内の任意の単一メッセージの最大許容サイズをバイト単位で設定できます。
# 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
結論
このチュートリアルでは、共有メモリ情報を確認するためのLinuxipcsコマンドについて学習しました。読んで楽しんでいただければ幸いです。以下のコメントセクションに提案を残してください。