Apache 2.0の新機能とその実力
Webサーバはどこまで進化するのか

一志 達也<ichishi@pochi.tis.co.jp>
TIS株式会社
2001/5/12

マルチスレッド・モードの検証

 今回は、時間的な制約もあって、マルチスレッド機能の簡単な検証のみを行うことにした。

 テストでは、筆者の環境でApache 1.3.19とApache 2.0 betaをインストールし(補足1)、Apacheに付属するベンチマークツールApache Bench(ab)を使ってパフォーマンスをチェックすることにした。

補足1 インストールするディレクトリ(PREFIX)を分離し、それぞれのポートを分けることで、Apache 1.3.19とApache 2.0を同時に稼働させることも可能。

実験の準備

 今回は、Apache 2.0を「perchildモード」でインストール。プロセスの起動数(NumServers)は「3」とし、1プロセスあたりの最小スレッド数(StartThreadsおよびMinSpareThreads)を「5」、最大スレッド数(MaxSpareThreads)を「10」とした。この状態でスタートしてプロセス数を調べると、11のプロセスが存在することが分かる(ps -ef | grep httpd |wcで調べられる)。

 11のプロセスといっても、このプロセスの親子関係が重要で、まず大元となるプロセスが1つ(プロセス番号1の子供)。そのプロセスの子供が4つ。この4つの中で、さらに子供を持つプロセスは3つあり、1つずつ子プロセスを持っている。さらにその子供が、それぞれ1つの子プロセスを持っているのだ(図1)。

図1 Apache 2.0は子プロセスがさらに子プロセスを生成する

 一方、Apache 1.3もプロセスの起動数(StartServers)は「3」とし、最小プロセス数(MinSpareServers)を「5」とした。この状態でスタートして、同様にプロセス数を調べると、こちらは7つのプロセスが存在した。

 こちらも同様にプロセスの親子関係を調べると、大元になるプロセスが1つ存在する点には違いがない。しかし、残り6つのプロセスは、すべて大元のプロセスの子供であるところが大きく異なっている(図2)。

図2 Apache 1.3では元のプロセスからすべての子プロセスが生成される

実験開始直後の問題

 この2環境に対して負荷テストを実行する。まずは小手調べということで、同時アクセス数「1」、リクエスト回数「1」で実験を行う。予想はしていたが、両者の間に違いはほとんど認められない。この時点では両者のプロセス数にも一切の変化はない(補足2)。

 そこで、同時アクセス数「10」、リクエスト回数「10」に引き上げてたところで、筆者はある異変に気付いた。

 Apache 1.3は、何度も実行するうちにプロセスの数が増えていく。これは、処理が終わりきらないうちに、次を実行しているためと思われるが、増えたプロセスが減ることはない。Apache 1.3の最大プロセス数(MaxSpareServers)は50になっているのだが、プロセスの数が増えたからといって、パフォーマンスが良くなるわけではないことは補足しておかなくてはならないだろう。

 また、このとき気付いた問題として、Apache 1.3の結果のばらつきが挙げられる。Apache 2.0の方は、何度も連続実行してもほとんど一定の結果を返したのだが、Apache 1.3では結果が大きく振れてしまう。このため、1.3の方は平均値を使わざるを得なかった。

補足2 「ps -ef | grep httpd | wc」でプロセスの数をカウントして監視した。

高負荷状態における2つのApache

 負荷を高めるといっても、筆者の環境では限界があるので、同時アクセス数・リクエスト回数ともに「50」までを段階的に調査した。その結果、ある程度負荷が高くなると、Apache 2.0の方が良好な結果を示すことが分かった(実験の結果はグラフのとおり)。また、Apache 2.0は負荷を上げてもプロセス数が一定だったことも強調しておきたい。

Time taken for testsの結果をグラフ化したもの。高負荷時に両者は異なる反応を示すことが分かる

 これだけの実験で結論付けるのは少々強引なのだが、負荷が高くなるとApache 2.0のマルチスレッドが効果を発揮すると証明できたのではないだろうか。グラフでは伝えられなかったが、負荷を高めていったときのメモリ消費量についても、Apache 2.0の方が良好な結果を示した。Apache 1.3では画面の動きが重くなるほどの負荷でも、Apache 2.0は余裕を持って動かせた、といえば分かりやすいだろうか。

 ここでさらに負荷を高めたいところなのだが、それは断念せざるを得なかった。なぜなら、Apache 1.3の結果のばらつきが激しくなり、どれを信じるべきか分からなくなってしまったのが1つ。また、Apache 2.0の方も限界を超えてしまい、すべてのリクエストを完了できなくなったのである。

 実際、筆者が行った同時アクセス50というのは、普通のPCで耐えられる限界に近い。PCサーバであっても100人、ローエンドのUNIXサーバでもせいぜい数百人が限界だ。そう考えれば、今回の実験はここまでで十分として構わないだろう。

チューニングはしてみたが

 とはいえ、チューニングによる影響は気になるところ。そこで、Apache 2.0の起動プロセス数を調整し、パフォーマンスに影響があるかを調べてみたのである。

 まず、デフォルトの制限値である8プロセスを立ち上げようとした場合、起動はしたものの、筆者の環境では同時アクセス10でも正常に動作しなくなった。これがハードウェア的に8プロセスでマルチスレッドをサポートできないのか、ソフトウェアの問題であるかは特定できなかった。

 次に、プロセス数を減らして、正常動作するところで実験してみた。しかし、その結果はプロセス数が3の場合と変わらず、今回の実験の限りでは、プロセス数の増加による影響を測定することはできなかった。これも、先ほどの問題と同じく、筆者のハードウェア環境ではプロセス数増加による恩恵が得られないだけかもしれない。

 いずれにしても、Apache 2.0はベータ版の段階であり、いますぐに結論を急ぐべきではない。今回の実験では、正式リリースに向けて期待できる結果が得られたと思う。より安定的なバージョンを待ちながら、機会があればより高性能なハードウェアでの実験も試みたいと思う。

Apache 2.0は大規模サイトで威力を発揮

 ここで紹介したApache 2.0は、あくまでもベータバージョンである。正式にリリースされたバージョンではないから、くれぐれも本番稼働中のサーバにインストールするようなまねをしてはならない。万が一の事態が起こっても問題のない環境を用意し、その上で動作させるべきだ。

 Apache 2.0の正式なリリース日程などは明らかにされていないが、続報を入手次第、Linux Squareで紹介できるようにするつもりだ。とにもかくにも、Apacheが2.0に進化する理由は、大規模なビジネスサイトへの対応にある。これまでのApacheは、Webサーバの基本機能を満たし、安定動作するという点では不満がなかった。しかし、サイト規模の拡大にはハードウェアで対応するしかなく、また技術の進化に対応するために複雑なモジュールを導入し続けるのは、おのずと限界が見えてくる。

 Apache 2.0は、この何年間かで培った経験を生かし、基本構成から見直している。そして、大規模ならではのニーズにこたえる機能を用意し、機能の拡充に関する複雑さも排除した。これで、ローエンドからハイエンドまで、本当の意味でカバーできるようになるはずだ。

 今回は、いささか中途半端にしか検証できなかったのだが、近いうちに各機能の徹底検証を行いたい。

4/4

Index
Apache 2.0の新機能とその実力
  待ちに待ったベータ版の登場
  2.0の新機能概説
 コアの変更
 マルチスレッドへの対応
 マルチプロトコルのサポート
 IPv6のサポート
 フィルタリング機能の追加
 APIの変更
 新しいビルド・システムの採用
  モジュールの変更
  Apache 2.0の入手とインストール
 autoconfとlibtoolのインストール
 Apache 2.0のconfigureとmake
 設定の確認と起動
 既存環境からのアップグレード
マルチスレッド・モードの検証
 実験開始直後の問題
 高負荷状態における2つのApache
 チューニングはしてみたが
  Apache 2.0は大規模サイトで威力を発揮

Linux Square全記事インデックス


 Linux Squareフォーラム サーバ構築・運用関連記事
連載:Heartbeatでかんたんクラスタリング(連載中)
オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します
特集:Apache 2.2でWebサイトをパフォーマンスアップ!
最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する
連載:実用 Apache 2.0運用・管理術(全8回)
本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える
連載:実用 BIND 9で作るDNSサーバ(全15回)
本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく
連載:実用qmailサーバ運用・管理術(全14回)
本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで
特集:Samba 3.0の全貌 改訂版
Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間