OpenVZ リソースの管理
OpenVZはバーチャルサーバを立ち上げるときに、リソースの割り当てとリソースを利用できる最大値を与えて起動します。
このリソースの最大値を設定できるおかげで、複数のバーチャルサーバが立ち上げても、1つのバーチャルサーバがシステム全体の負荷を上げすぎないように設 定できるわけですが、OpenVZをインストールしたなりの環境では、あまり多くのサービスをバーチャルサーバ上で動かせない設定値になっています。
そこで、リソースを適切に割り当てができるよう、必要に応じてパラメータを修正します。
(1)リソースの使用状況の確認
まずはリソースが足りているかどうかを見るためにuser_beancountersを参照します。failcntが0以外のところが、リソースが足りていないことを示しています。
上記状態は、Postfix(SMTPサーバ)にて、メール送信しようとしたときに発生しました。
つまり通信で使うソケットの数が足りていないことを示していることになりますね。
今回の場合は、SMTPサーバがネットワークドライバとの接続ためにソケットをオープンしようとしたが、オープン失敗でメールが送信できなかったということになります。
メール送信失敗では、エラーメッセージに「通信ソケットがオープンできない」としか表示されません。
通常はネットワークがらみか、postfixのインストール失敗を疑って原因を探りますが、バーチャルサーバの場合は、最初にサーバリソースを疑うべきでしょう。
バーチャルサーバでサービスを運用していると、ついついバーチャルであることを忘れがちなので、いつもリソースを確認するようにしよう。
(私もバーチャルサーバであることを忘れて、無駄な時間を費やしてしまった。)
(2)リソースパラメータの修正
リソースのパラメータを編集するには、バーチャルサーバ個々のコンフィグファイルを修正します。# vi /etc/vz/conf/101.conf
ファイルをオープンすると、各パラメータの値が[:]コロン区切りで記述されています。前部がbarrierで、後部がlimitになります。
通例として、barrierの値の110%をlimitの値としていることが多いようです。
例えば
KMEMSIZE="2752512:2936012"
※なお、このファイルはサーチャルサーバではなくて、バーチャルサーバを機能している本サーバに存在します。# vzctl restart 101
※これで、バーチャルサーバが再起動される。(101はバーチャルのID)
もう一度、VPSにログインして、リソースが増えているか確かめる。
# vzctl enter 101
ntered into VE 101
VEVE# cat /proc/user_beancountersパラメータはプライマリ、セカンダリ、補助のカテゴリに分かれており、セカンダリパラメータはプライマリパラメータに依存した形になっています。VPS構築後の運用は通常、セカンダリパラメータと補助パラメータを修正することが多いようです。
プライマリパラメータ
パラメータ | 内容 |
---|---|
avnumproc | プロセスとスレッドの数の平均 |
numproc | VPS が作成可能なプロセスとスレッドの最大数 |
numtcpsock | TCPソケットの数。 このパラメータはTCP 接続の数を制限することにより、サーバアプリケーションが同時に処理できるクライアントの数を制限します。 |
numothersock | TCP 以外のソケットの数。ローカル(UNIX ドメイン)ソケットはシステム内の通信に使用されます。UDP ソケットは、ドメインネーム サービス(DNS)のクエリなどに使用されます。UDPおよびその他ソケットで使用されます。 |
vmguarpages | メモリ割り当て保証、ページ単位(1 ページ4KB)。VPS アプリケーションは追加メモリprivvmpages(補助パラメータの項参照)が設定された vmguarpages パラメータのバリアを超えない範囲で割り当てることを保証されています。バリアを超えると追加メモリの割り当ては保証されず、メモリ不足の際には割り当て されない可能性があります。 |
セカンダリパラメータ
パラメータ | 内容 |
---|---|
kmemsize | 特定のVPS プロセスのため内部カーネル構造へ割り当てられる、スワップ不可のカーネルメモリ。 |
tcpsndbuf | TCP ソケットへの送信バッファの合計サイズ。アプリケーションからTCP ソケットへ送られるデータへのカーネルメモリ割り当て量です。リモートサイドに応答される前の状態です。 |
tcprcvbuf | TCP ソケットの受信バッファの合計サイズ。リモートサイドで受信されるデータへのカーネルメモリ割り当て量です。ローカルアプリケーションでは読み込まれていない状態です。 |
othersockbuf | UNIX ドメインソケットバッファ、UDP、およびその他データグラムプロトコル送信バッファの合計サイズ。 |
dgramrcvbuf | UDP およびその他データグラムプロトコルの受信バッファの合計サイズ。 |
oomguarpages | メモリ外保証、ページ単位(1 ページ4KB)。VPS プロセスは現在のメモリ消費量(物理メモリとスワップメモリを含む)がoomguarpages バリアに達しない限りは、深刻なメモリ不足が生じても停止しません。 |
補助パラメータ
パラメータ | 内容 |
---|---|
lockedpages | スワップアウトが許されていないメモリ(mlock()システムコールでロックされている)、ページ単位。 |
shmpages | 特定のVPS のプロセスにより割り当てられる共用メモリの合計サイズ(IPC、共用アノニマスマッピング、tmpfs オブジェクトを含む)、ページ単位。 |
privvmpages | アプリケーションにより割り当てられるプライベート(または潜在的プライベート)メモリのサイズ。常に複数のアプリケーション間で共用されるメモリはこのリソースパラメータには含まれていません。 |
numfile | 全てのVPS プロセスが開くファイルの数 |
numflock | 全てのVPS プロセスが作成するファイルロックの数 |
numpty | 擬似ターミナルの数。ssh セッション、screen アプリケーションまたはxterm アプリケーションなど。 |
numsiginfo | siginfo 構造の数(基本的に、このパラータはシグナルデリバリキューのサイズを制限する) |
dcachesize | メモリでロックされているdentry およびi ノード構造の合計サイズ。 |
physpages | VPS プロセスが使用するRAMの合計サイズ。このパラメータは、現在はアカウンティング専用です。VPS ごとのRAM 使用を示します。複数の異なるVPS に使用されるメモリページ(共用ライブラリのマッピングなど)。 ページに対応する小数部のみが各VPSにチャージされます。全てのVPS のphyspages 使用の合計は、システム内で全てのアカウントユーザーに使用されるページの合計に対応します。 |
numiptent | IP パケットフィルタリングエントリの数 |
※パラメータの説明は、Virtuozzo Ver3.0 ユーザーズガイドより引用させて頂いています。