« | »

2013.11.03

Apacheのチューニング(3)

前回の投稿ではApache自体は大変処理能力が高いサーバーソフトであることがわかりました。

 

では、スクリプトが実行される動的ページではどうなるか…ベンチマークをかけてみます。

 

まずは、/etc/init.d/httpd restart としてApache関連ソフトを一斉リスタートしてゾンビプロセスを開放します。

つぎに、このblogサイトがWordPressで動いていますので、このサイトトップに対してベンチマークをかけます。

まずは、静的ページと同じように、同時接続100から。

  $ ab -c 100 -n 1000 http://www.wendy-net.jp/otoyo/

このコマンドを実行します。

 

…えーと… まったく応答が返ってこなくなります。

 

サーバーが完全に息切れ状態。

リソース状況を確認すると、CPUが100%に張り付き、メモリがオーバーフローしてSWAPもすべて消費されています。

20131016E

 

さらに1-2分様子を見ると、

20131016F

 

あまりにSWAPが激しすぎて、CPUリソースが下がり始めています。

 

これはページング処理の末期症状でもあり、SWAPのためにSWAP領域を確保するためDISK-I/Oに処理をとられすぎてなにも処理できていない状態となっています。この状態は言い換えると、端末100台から同時F5アタックを受けているのと同じ状態なので、このように事態にならないようにチューニングする必要があります。

 

では、どの程度まで同時接続を減らしていくとSWAP領域を極端に消費しなくなるかテストを繰り返します。

ここのサーバー構成・WordPressの動作状況では、同時接続15…

  $ ab -c 15 -n 1000 http://www.wendy-net.jp/otoyo/

 

ここまで下げてやっと実用的なリソース状況まで下げることが出来ました。

20131016I

 

これでもCPUリソースが100%行ってしまっているので、ベンチマーク結果は10-15秒くらいかかって1ページを処理するためかなり遅いです。

それでもサーバーはダウンしていませんので、このあたりが同時接続の上限ということになります。

 

意外に処理できる接続数が少ないというのが正直なところ。

 

Apacheだけの処理であれば同時接続1000でも耐えそうですが、動的ページはサーバーにかなりの負担をかけるということなのでしょう。

 

この主な原因はphpスクリプトエンジンにあり、CentOS6.4にインストールされるphp5では、phpプロセスに割り振られるメモリ(ヒープメモリ)がデフォルトでは128MBとなっています。 常にすべてのヒープメモリを消費しているわけではないですが、同時接続が15程度で1GB割り振ったサーバーのメインメモリを枯渇させていますので、phpによるメモリ消費が半端ないことがわかります。

 

またCPU消費も一気に100%に駆け上がっていることから、phpはかなり重いプログラムであることがわかります。

 

考えてみればLAMPサーバーって変な取り合わせです。

LAMPサーバーのL=Linux / A=Apache / M=MySQL・・・これらサーバーはCPU消費やメモリ消費を極力少なくなるようカリカリチューニングされたサーバーで、安定度も定評があります。

でも最後のP=php がCPU喰いメモリ喰いな上にゾンビ化しやすく、安定度も低い…。

もともとphpはこういう用途で作られたのではないとはいえ、その他Ruby言語やPythonもかなり重い言語でもありますので、結局LAMPサーバーではPのスクリプトエンジンが総じてサーバーリソースを大喰らいしていると言っても過言ではありません。

 

そして、これら言語で作られた動的WEBサーバーが時代の先端というのもなんだか妙な感じです。

 

次回は、これらリソース大喰らいなスクリプトエンジンに振り回されないよう、サーバーが処理できるリソースに見合った設定ファイルに書き換えます。

(つづく)

 

 

おまけ / そのころ、親サーバーでは…

同時接続100の時のベンチマークではここのWEBサーバーはSWP処理のため応答不能状態に陥っていますが、VMwareが動作している親(物理)サーバーはどうかというと…下図の通り。

20131016J

CPUであるXeon E3-1265LV2の4コア8スレッドが枯渇しているわけではなく、あくまでひとつのスレッドが忙しい状態でしかありません。

CPUを満遍なく動作させるためにコアを入れ替わり動作させているところもリソースメーターからわかります。

 

親サーバーにはVMwareWorkStation9.0.2がインストールされており、配下にはこのWEBサーバー以外に、リバースプロキシ(CentOS6.4)・旧WEBサーバー(RedHat9)・Mailサーバー(WindowsXP)・Sambaサーバー(CentOS6.4)・UPS監視サーバー(RedHat9)、デスクトップ評価用WindowsXPが同時実行していますが、WEBサーバーが応答不能になっていたとしても他の仮想OSにはほとんど影響を与えていません。(メモリ消費は実際には8GB程度消費していますが、リソースメーターではなぜか正しく表示されないので、メモリ部分はここでは無視します)

 

このあたりがVMwareでサーバーを仮想化することもメリットでもあり、仮想空間に適切にリソースを割り振ればサーバーがダウンしたとしても物理サーバーは無事に動作させ続けることが出来ます。(イコール、傷害に対処することが容易になる)

 

 

Trackback URL

Comment & Trackback

No comments.

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">