at_yasu's blog

ロード的なことを

軽量化

tracを入れると、重量級に重たくなったので、不要なmoduleを消してみたり、StartServerの数を増やしたりといろいろ試行錯誤をしてみたので、そのメモ。


参考:httpd.confによるWebサーバの最適化 (1/3):実用 Apache 2.0運用・管理術(3) - @IT


まずモジュール

今、起動時にLoadしているモジュール一覧。大量……

actions_module
メディアタイプやリクエストメソッドに応じて CGI スクリプトを実行する機能を提供
alias_module
ホストファイルシステム上のいろいろな違う場所を ドキュメントツリーにマップする機能と、 URL のリダイレクトを行なう機能を提供する
authn_file_module
テキストファイルを用いたユーザ認証
authn_anon_module
認証が必要な領域への "anonymous" ユーザのアクセスを許可する
authn_default_module
認証フォールバックモジュール
authn_alias_module
Provides the ability to create extended authentication providers based on actual providers.
authz_host_module
ホスト (名前もしくは IP アドレス) に基づいたグループ承認
authz_groupfile_module
プレーンテキストファイルを用いたグループ承認
authz_user_module
ユーザ承認
authz_owner_module
ファイルの所有者に基づいた承認
authz_default_module
承認フォールバックモジュール
authz_svn_module
Subversion認証モジュール
auth_basic_module
基本認証
auth_digest_module
MD5ダイジェスト認証
cache_module
URI をキーにしたコンテンツのキャッシュ
dir_module
「最後のスラッシュ」のリダイレクトと、ディレクトリのインデックスファイルを扱う機能を提供する
dav_module
分散オーサリングとバージョン管理 (WebDAV) 機能
dav_svn_module
バージョン管理Subverion機能を提供
disk_cache_module
ディスクを使用したストレージ 管理機構を実装
dumpio_module
望むようにすべての I/O をエラーログにダンプする
file_cache_module
Caches a static list of files in memory
include_module
サーバがパースする html ドキュメント (Server Side Includes)
filter_module
Context-sensitive smart filter configuration module
charset_lite_module
Specify character set translation or recoding
deflate_module
クライアントへ送られる前にコンテンツを圧縮する
log_config_module
サーバへのリクエストのロギング
logio_module
リクエスト毎に入力バイト数と出力バイト数とをロギング
env_module
CGI スクリプト及び SSI ページに渡される環境変数を変更する機能を提供する
mime_magic_module
Determines the MIME type of a file by looking at a few bytes of its contents
cern_meta_module
CERN httpd metafile semantics
expires_module
ユーザの指定した基準に基づいた Expires と Cache-Control HTTP ヘッダの生成
headers_module
HTTP リクエストのヘッダと応答のヘッダのカスタマイズ
usertrack_module
Clickstream logging of user activity on a site
unique_id_module
それぞれのリクエストに対する一意な識別子の入った環境変数を提供する
setenvif_module
リクエストの特徴に基づいた環境変数の設定を可能にする
version_module
Apacheのバージョン依存を解消する。
ssl_module
Strong cryptography using the Secure Sockets Layer (SSL) and Transport Layer Security (TLS) protocols
mime_module
リクエストされたファイルの拡張子とファイルの振る舞い (ハンドラとフィルタ)、内容 (MIME タイプ、言語、文字セット、エンコーディング) とを関連付ける
status_module
サーバの活動状況と性能に関する情報を提供する
autoindex_module
Unix の ls コマンドや Win32 の dir シェルコマンドに似た ディレクトリインデックスを生成する
asis_module
自分用の HTTP ヘッダの書かれているファイルを送信する
info_module
サーバの設定の包括的な概観を提供する
cgi_module
CGI スクリプトの実行
vhost_alias_module
Provides for dynamically configured mass virtual hosting
negotiation_module
コンテントネゴシエーション 機能を提供する
imagemap_module
Server-side imagemap processing
speling_module
ユーザが入力したであろう間違った URL を、大文字小文字の区別を無視することと一つ以下の綴り間違いを許容することで修正を試みる
userdir_module
ユーザ専用のディレクトリを提供
rewrite_module
Provides a rule-based rewriting engine to rewrite requested URLs on the fly


必要、不必要と切り分けて、その時に必要になったら、LoadModule ..とするようにすれば、軽量化になる。かな……

勿論、どこにも使ってないモジュールはコメントアウトしておき、どこにでも使うようなモジュール(actions_module, authz_user_moduleとか)はhttpd.confでロードしておく。てか、staticにしとけよ…

preforkとworker

MPMは、mod_python+Djangoの都合でworkerで使えないので、必然的にprefork。

ここのステータスはこんな感じ。一人で使ってるからのと、たまに衝動的にDjangoで開発をすることがあるから、MaxRequestsPerChildは少なめで。*1

<IfModule prefork.c>
StartServers        10
MinSpareServers     10
MaxSpareServers     40
MaxClients          30
MaxRequestsPerChild  1000
</IfModule>

*1:MaxRequestsPerChildが5000とか6000ってそんなもんだったっけなぁ…