プロセス間通信(IPC:Inter Process Communication)
プロセス間通信(IPC:Inter Process Communication)
プロセス間通信に関連するパラメータはすべてカーネルパラメータとして設定されています。
使用しているアプリケーションによって設定値を指定されているものもありますので、アプリケーションの要件にあわせてチューニングをしてください。
共有メモリ
共有メモリ関連のパラメータで主要なものは以下の3つがあります。DB2で大きなバッファプールを使用したい場合、shmall、shmmaxの値はバッファプールのサイズより大きい価である必要があります。
確認時に使用する「ipcs」コマンドの出力と設定する単位が違う点に気をつけてください。
| パラメータ | 設定例 | 説明 |
|---|---|---|
| kernel.shmall | 2097152 | システム全体の共有メモリの最大サイズ(単位:4Kページ) |
| kernel.shmmax | 33554432 | プロセスごとに利用可能な共有メモリの最大サイズ(単位:バイト) |
| kernel.shmmni | 4096 | 共有メモリのセグメント数 |
セマフォ
システム全体でのセマフォの最大値は小さめの数字となっています。不足するケースに遭遇することがありますので、4番目の値を大きくすることがよくあるかと思います。アプリケーションの推奨値として増やすように指定されていることもよくあります。
| パラメータ | 設定例 | 説明 |
|---|---|---|
| kernel.sem | 250 32000 32 128 | スペースで区切られた4つの値で設定します。 |
このスペースで区切られた4つの値の意味は次の通りなります。
- SEMMSL
- セマフォ集合ごとのセマフォ数の最大値。
- SEMMNS
- システム全体での、全てのセマフォ集合におけるセマフォ数の制限。
- SEMOPM
- semop(2)コールに指定されるオペレーション数の最大値。
- SEMMNI
- システム全体でのセマフォ識別子の最大値。
メッセージキュー
メッセージキューの最大値は標準では16となっており、これは非常に小さな値です。アプリケーションの推奨値に従って変更してください。
| パラメータ | 設定例 | 説明 |
|---|---|---|
| kernel.msgmni | 16 | システム全体のメッセージキューの最大値 |
| kernel.msgmnb | 16384 | 単一メッセージキューの最大サイズ |
| kernel.msgmax | 8192 | プロセス間で送信されるメッセージの最大サイズ |
ファイルシステム
CPUのawaitの割合が高い場合やI/O待ち時間が長い場合、ディスクI/O性能がボトルネックとなっている可能性が考えられます。ディスクI/Oのボトルネックが原因となってロードアベレージの値が大きくなることもあります。
こういった場合、どのデバイスがボトルネックとなっているのかをiostatの出力から確認する必要があります。データベースの場合はコンテナを配置したデバイスなのか、ログを出力しているデバイスなのか、といった点を確認してください。
頻繁にスワップ領域へのI/Oが発生している場合も同様にI/Oウェイトの割合が大きくなります。スワップ領域へのI/Oが多く発生している場合、 根本的な原因はディスクI/Oではなくメモリ不足などの別の原因である可能性が考えられます。この場合はファイルシステムのチューニングでは対処できませ ん。この項での説明は大量のスワップが発生していない環境であることが前提となります。
ディスクI/Oに関しては、OS上からチューニング可能な部分はそれほど多くはなく、どちらかといえばOSでチューニング可能ではない要因に依存す る部分が大きくなります。OSとは別でI/Oのパフォーマンスに影響を与える要因は以下のようなものが考えられます。
- ディスク装置の性能(ディスク装置の種類、キャッシュのサイズ、キャッシュの有効/無効)
- RAID構成(ディスクの種類、ディスク本数、ストライプサイズ)
- デバイスドライバ
- データベースの設計
ディスクI/Oがボトルネックだと考えられる場合、まず上記のような点に問題がないのか確認することが必要となります。どんなチューニングを行ってもディスク装置の性能以上の読み書きを行うことはできません。
ハードウェア環境に問題がない場合に限り、ファイルシステム関連のチューニングによってパフォーマンスを向上させることが可能です。チューニング可能な主な項目として次で解説するような項目があります。