▼ 2009/04/26(日) サイトチューニング -その1-
このブログを含めて自宅サーバで色々と運用しているわけですが、パフォーマンス周りは色々と試していて、チューニングをそれなりに施してあるので、どんなチューニングや設定を施しているか紹介していきたいと思いますよ。たぶん長くなるので、複数回に渡って連載!第1回目の今回はWebサーバがうちのサーバのメインの役目なので、Apache周りの話しでも。
先ずは、うちのサーバのスペックです。最近のスペックと比較するとかなり劣ってしまうスペックだね。まぁ、個人でちょっとやってるサイトのサーバなら全然問題無いスペックだと思うけど。
| CPU | Intel(R) Celeron(R) CPU 2.40GHz |
|---|---|
| Memory | 768MB |
| OS | CentOS 5.3 |
ちなみにハードディスク性能としてはこんな感じ。
$ sudo hdparm -Tt /dev/hda /dev/hda: Timing cached reads: 2060 MB in 2.00 seconds = 1029.28 MB/sec Timing buffered disk reads: 220 MB in 3.01 seconds = 73.10 MB/sec
あとIPアドレスは固定じゃないので、DDNSを使って動的に変更できるようにしてある。VALUE DOMAINってところを使用していますよ。comとかorgとかのドメインであれば年間1000円くらいで取得できちゃう。そんでDDNSの更新にはPythonで作った自作のスクリプトを使用してる。1年以上使ってるけど、まぁちゃんと更新してくれてるみたいなので大丈夫でしょう。
■ コンテンツについて
このブログは、adiaryという素晴らしいブログを利用してますよ。元々、ブログを書くならhatenaしか興味無かったんですが、このadiaryならほぼhatenaと一緒なので非常に使いやすいです。perlで書かれているので、我が家では mod_perlで動作させています。他にもSpeedyCGI/FastCGIに対応しているので、いずかで設定するのがパフォーマンス的に良いでしょう。
あと自分用のメモの為にPukiwikiというWikiを使っていますが、APCというアクセラレータを導入しています。この辺については、 PHPのアクセラレータを使ってみるでまとめているので興味があればどうぞ。
さて、前置きはこれくらいにしておこう。なお、サーバがCentOSなのでCentOSでの設定方法です。まぁ、Debianなどの他のディストリでも共通する項目は多いと思います。
■ Apache周りの設定でも
以下設定するファイルは、/etc/httpd/conf/httpd.confとする。
ログをメモリに蓄えておいて後でディスクに書き出すようにする
ログを書き出す際に、それぞれの処理ごとに書き出すんじゃなくて、一旦メモリに蓄えておいて後でまとめてディスクに書き出すようにしてやる。以下のモジュールが読み込まれている必要がある(デフォルトでは有効にさせてるはず)
LoadModule log_config_module modules/mod_log_config.so
ログ周りの記述のある部分に以下を追加してやる。
BufferedLogs On
上記の記述を追加したらApacheを再起動して反映させてやる。試しにtail -f でApacheのaccess_logでも見てみる。この設定を入れる前であればアクセスの都度、記録されていたが、この設定を入れることである程度のバッファがたまるまではびくともしないはず。
ただ、バッファに蓄えてる時にシステムダウンなどが発生すれば、その時のログは保証されないので、それでは困るという場合にはこの設定は入れないほうがいい。
HostnameLookupsをOFFにする
これをONにしてしまうとDNSの逆引きが発生してしまう。今回Apache周りのことをあーだこーだ書くけど、実際この設定のON/OFFが一番計測結果に影響があった。ただ、これをOFFにしちゃうとログに書き出される際、全部IPアドレスになってしまうので、これでは何かと不都合がある場合はONのままのほうがいい。パフォーマンスを取るか利便性を取るかと言ったところ。OFFにする場合は以下のように設定する。
HostnameLookups Off
KeepAlive周りの設定
KeepAlive周りはうちでは以下のように設定している。先ずはONにして設定を微調整していく。
Timeout 300 KeepAlive On MaxKeepAliveRequests 500 KeepAliveTimeout 1
MaxKeepAliveRequestsは、KeepAliveが有効な場合の一回の接続で受け付け可能なリクエストの数を制限する項目。デフォルトでは100だったが、サーバ性能を向上させるには大きめの値を指定したほうがいいので500とした。
KeepAliveTimeoutは、接続を閉じる前にApacheが次のリクエストを何秒待つかを指定する項目。タイムアウトが長いとクライアントからの接続の終了を待ち続けることになってしまう。デフォルトは15だが1に設定した。
Etagを付加しないようにする
FirefoxのアドオンでYSlowという便利なものがある。パフォーマンスチューニングするにあたって非常に強い味方になってくれるはず。これを使うと色々とどこが駄目とか評価してくれる。何もしてないとEtagの項目はFランクになる。下記の設定を入れることでAランクに上昇する。
FileETag None
参考:
意図しないものへのアクセスを制限する
直接パフォーマンスに関係はしないけど、Apahceの設定として。例えば、デフォルトでは、http://~~/manual/にアクセスするとマニュアルのページが表示される。ちなみにこれは誰からもアクセス可能。以下の記述を入れることで、このマニュアルページへのアクセスを拒否することができる。
<Directory "/var/www/manual">
Options None
AllowOverride None
Order allow,deny
Deny from all
</Directory>
次にバックアップファイルっぽいファイルへのアクセスを禁止する。コンテンツ内で何か変更をする時にバックアップとしてindex.html.bakなどと変更前のファイルを残すこともあるでしょう。このindex.html.bakというファイルへアクセスされることは意図してないはず。以下の記述を入れて禁止できる。
<FilesMatch "(^\.ht|~$|\.bak$|\.BAK$)">
Order Allow,Deny
Deny from all
</FilesMatch>
デフォルトのディレクトリの振る舞いも強化しておいたほうが無難。以下では特に指定が無い限りは拒否の体制となる。
<Directory />
Order Allow,Deny
Deny from all
Options None
AllowOverride None
</Directory>
公開するディレクトリで制限を解きたい箇所を設定するようにする。
HTTP TRACEを無効にする
niktoというセキュリティスキャナを使って、自分のApacheを調査していたところ、TRACEが有効でよろしくないという診断が出た。有効な状態だとHTTPヘッダーに含まれる認証データの類を盗まれる可能性もあるので、以下の記述を入れて無効にしておく。
TraceEnable off
その他のチューニング
不要なモジュールは極力読み込まないようにしてやる。mod_davなんて使わないのに有効にしてても意味がないです。他にも自分にとって不要と思われるモジュールはどんどん読みこまないようにしてやったほうがいい。
あと、.htaccessは理由が無い限りは使わないようにする。httpd.confへの直接の記述が許されないなど、仕方無い場合だけ使うようにする。
色々とhttpd.confをいじったと思うので、Apacheの再起動をかける前に以下のコマンドでSyntaxチェックをするのが無難です。
# apachectl -t Syntax OK
Syntax OKと出れば記述の文法ミスやスペルミスなどは無しなので、心置きなくApacheを再起動してやって下さい。あと、Apacheへのパフォーマンス計測は簡単なものであればabコマンドを使うのが最もお手軽。色々と自分なりに設定を変えたり、負荷のかけかたを変えたりと試してみて下さい。
さて、もう長くなってきたので今回はこの辺で。まだApacheの話しは終わってないので、次回もApacheの話しですよ。続きは、暇で尚かつ気が向いた時に書くので気長に待っててください。
- TB-URL http://chibilog.name/0373/tb/

1: 忍 2009年04月27日(月) 午前11時48分
全然わからん(´・ω・`)
2: chibi 2009年04月27日(月) 午後7時17分
こんなものより屋根裏への忍び方とか手裏剣の投げ方を知ってるほうがはるかに役立つよね!
これ書いててサーバなんてチューニングしてないで、自分をそろそろチューニングしないといけないんじゃないかって思ってきたw
3: 忍 2009年04月27日(月) 深夜0時04分
ちびたんくらいになるとハイパーダッシュモーター
より早いなんだかうさんくさいパチモン
モーター買ってこないと駄目だね!
4: chibi 2009年04月28日(火) 午前8時56分
なんだその胡散臭いパチモンモーターってw
ミニ四駆じゃないんだからさ・・・昔、僕のミニ四駆はモーターをいじってたら何故か逆走するようになってたから、僕もきっと逆走するようになるんじゃないかな。