Apacheのプロセス生成とパフォーマンスに与える影響について確認しました。
下記資料を参考にしました。
Apache Performance Tuning
※目次をクリックすると目次の下部にコンテンツが表示されます。
StartServers、MinSpareServers、MaxSpareServersの設定
●各設定項目の概要
・StartServers
起動時に生成される子サーバプロセスの数
・MinSpareServers
アイドルな子サーバプロセスの最小個数
・MaxSpareServers
アイドルな子サーバプロセスの最大個数
●”1秒に1子プロセス”ルールとは?
・”StartServers”によって起動後、”MinSpareServers”で設定された数まで1秒間に1個ずつ子プロセスが生成されます。
100クライアントからの同時アクセスがあるサーバーでは、”StartServers”がデフォルトの5である場合、100個の子プロセスが生成されるのに95秒かかってしまいます。
実際に本番環境でサービスを提供しているサーバーは頻繁に再起動されないのでこの影響は少ないのですが、10分間した動作させないようなペンチマークテストではこの影響の無視できなく試験結果として悪い数字となってしまいます。
・この”1秒に1子プロセス”ルールは、子プロセスが一斉に起動してマシンに一時的に大きな負荷がかかるのを避けるために導入されました。
もしマシンが子プロセスを生成中にビジーになってしまうとリクエストを処理できなくなってしまいます。
●”1秒に1子プロセス”ルール→指数関数的に起動
・Apache1.3では、”1秒に1子プロセス”ルールは緩和されました。
1子プロセス生成、1秒待機、2子プロセス生成、1秒待機、4子プロセス生成と、”MinSpareServers”設定個数まで、指数関数的に1秒に32子プロセスまで継続されます。
これによって、MinSpareServers、MaxSpareServers、StartServersの設定値をほとんど調整する必要がなくなるほど改善されました。
・もし1秒間に4子プロセス以上生成されるとログにエラーメッセージが記録されます。
もし頻繁にこのエラーが発生していたらこの設定をチューニングするようにします。
・StartServers
起動時に生成される子サーバプロセスの数
・MinSpareServers
アイドルな子サーバプロセスの最小個数
・MaxSpareServers
アイドルな子サーバプロセスの最大個数
●”1秒に1子プロセス”ルールとは?
・”StartServers”によって起動後、”MinSpareServers”で設定された数まで1秒間に1個ずつ子プロセスが生成されます。
100クライアントからの同時アクセスがあるサーバーでは、”StartServers”がデフォルトの5である場合、100個の子プロセスが生成されるのに95秒かかってしまいます。
実際に本番環境でサービスを提供しているサーバーは頻繁に再起動されないのでこの影響は少ないのですが、10分間した動作させないようなペンチマークテストではこの影響の無視できなく試験結果として悪い数字となってしまいます。
・この”1秒に1子プロセス”ルールは、子プロセスが一斉に起動してマシンに一時的に大きな負荷がかかるのを避けるために導入されました。
もしマシンが子プロセスを生成中にビジーになってしまうとリクエストを処理できなくなってしまいます。
●”1秒に1子プロセス”ルール→指数関数的に起動
・Apache1.3では、”1秒に1子プロセス”ルールは緩和されました。
1子プロセス生成、1秒待機、2子プロセス生成、1秒待機、4子プロセス生成と、”MinSpareServers”設定個数まで、指数関数的に1秒に32子プロセスまで継続されます。
これによって、MinSpareServers、MaxSpareServers、StartServersの設定値をほとんど調整する必要がなくなるほど改善されました。
・もし1秒間に4子プロセス以上生成されるとログにエラーメッセージが記録されます。
もし頻繁にこのエラーが発生していたらこの設定をチューニングするようにします。
MaxRequestsPerChild
・個々の子サーバが稼働中に扱うリクエスト数の上限で、この数のリクエストを処理すると子プロセスは終了します。
・デフォルトは0で、無制限になっています。
・もし現状の設定値が30など低い数値が設定されている場合、大きな値に変更することもあるかと思いますが、SunOSや古いバージョンのSolaris上で実行している場合は、メモリーリークを考慮し、10000程度に留めたほうが良いようです。
・デフォルトは0で、無制限になっています。
・もし現状の設定値が30など低い数値が設定されている場合、大きな値に変更することもあるかと思いますが、SunOSや古いバージョンのSolaris上で実行している場合は、メモリーリークを考慮し、10000程度に留めたほうが良いようです。
KeepAliveTimeout
・キープアライブを利用している場合、子プロセスはすでにオープンしているコネクション上でより多くのリクエストを待機するしかない状況に陥ってしまいます。
KeepAliveTimeoutのデフォルト値は5秒になっていて上記影響を最小化する効果があります。
・KeepAliveTimeoutを大きな値に設定すると、負荷の高いサーバにおいてはパフォーマンスの問題を引き起こす場合があります。タイムアウトが長ければ長いほど、より多くのサーバプロセスが活発でないクライアントからの接続の終了を待ち続けることになってしまいます。
ここでのトレードオフは、ネットワーク帯域幅とサーバーリソースの間で発生します。
60秒以上までこの設定値を引き上げてしまうと多くのメリットが失われてしまうようなので注意します。
KeepAliveTimeoutのデフォルト値は5秒になっていて上記影響を最小化する効果があります。
・KeepAliveTimeoutを大きな値に設定すると、負荷の高いサーバにおいてはパフォーマンスの問題を引き起こす場合があります。タイムアウトが長ければ長いほど、より多くのサーバプロセスが活発でないクライアントからの接続の終了を待ち続けることになってしまいます。
ここでのトレードオフは、ネットワーク帯域幅とサーバーリソースの間で発生します。
60秒以上までこの設定値を引き上げてしまうと多くのメリットが失われてしまうようなので注意します。
-
インストール、設定全般、運用
- Apacheのインストール
- Apache初期設定確認
- Apacheの静的、DSOモジュールの確認、インストール方法
- Apacheでconf.dディレクトリ内の設定ファイルのインクルードに注意
- Apacheのhttpdサービスの使用方法
- WordPressパーマリンク設定時のApache設定
- Apache mod_rewriteの仕組み、設定方法、動作確認
- Apacheで特定の拡張子を含むリクエストをログ対象から外す
- CentOS Stream9でApache、PHPを設定する際の注意点
- ApacheのTraceメソッドを無効にする
- ヘッダーにApacheバージョンが表示されないようにする
- PHPのバージョン情報とApacheの設定
- Apacheでディレクトリ内一覧表示を無効にする
- Apacheで不要なモジュールはロードしない
- Apacheで不要なモジュールはロードしない(1)ベーシック認証と認証プロバイダ
- Apacheで不要なモジュールはロードしない(2)ダイジェスト認証
- Apacheで不要なモジュールはロードしない(3)mod_rewrite、LDAP、WebDAV
- Apacheで不要なモジュールはロードしない(4)Server Side Includes
- Apacheで不要なモジュールはロードしない(5)mod_mime_magic
- Apacheで不要なモジュールはロードしない(6)mod_info、mod_status
- Apacheで不要なモジュールはロードしない(7)mod_speling、mod_userdir
- Apacheで不要なモジュールはロードしない(8)プロキシ関連のモジュール
- Apacheで不要なモジュールはロードしない(9)キャッシュ関連のモジュール
- Apacheで不要なモジュールはロードしない(10)CGI関連のモジュール
- Apacheで不要なモジュールはロードしない(11)フィルター、expires、圧縮のモジュール
- Apacheでディレクトリへのアクセスを制限する設定方法
- Apacheベーシック認証の設定手順とセキュリティ上の注意
- Apacheで使用できるHTTPメソッドを制限する
- FIPS140-2とApacheのmod_nss
- Apacheにおける自己証明書作成手順
- ApacheにおけるSSL証明書インストール手順
- DoS攻撃からWebサーバーを保護するApacheモジュール
- Apacheに関するLinux側のセキュリティ設定(パーミッション、iptables、chroot)
- Modsecurityの概要と特徴
- Modsecurityのインストール方法
- modsecurityの設定方法と設定例
- Apacheのパフォーマンスに影響を与えるOS、ハードウェアの要素、注意点
- ApacheのMPMの概要とチューニング
- ApacheのMaxClientsのチューニングとListenBacklog
- HostnameLookupsを有効にして名前解決を行う場合のApacheパフォーマンスに与える影響
- FollowSymLinks、SymLinksIfOwnerMatchの設定とApacheのパフォーマンス
- AllowOverrideの設定とApacheのパフォーマンス
- コンテントネゴシエーションの設定とApacheのパフォーマンス
- Apacheのプロセス生成とパフォーマンスに与える影響
セキュリティ
パフォーマンス