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系列の新機能、インストール方法、国際化の現状を解説する |
|
|
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|