簡単にできるWebサーバの負荷軽減
先日書いた「最低限やっておくといいApacheチューニング」の補足として、Webサーバの負荷軽減について、簡単にできることだけ紹介したいと思います。
サーバ全体の負荷を減らす
基本中の基本です。Webサーバとして不要なプロセスを停止させることで、サーバ全体の負荷を減らします。さくらVPSとかだと、最初から不要なプロセスはほとんど停止されているので、あまり気にしなくてもいいかと思います。
一からインストールする場合は、以下のページがすごく参考になります。
CentOSをサーバーとして活用するための基本的な設定 - さくらインターネット創業日記
キャッシュを利用する
キャッシュを活用すれば、Webページの読み込みが速くなるだけでなく、サーバの負荷も軽減できます。PHPを使っているならAPCがベストです。APCの導入方法は「さくらVPSでWebサーバを構築するテンプレ」を参考にしてください。「pecl install APC」で入れると面倒なので「yum install php-pecl-apc」の方をオススメします。
他にもプログラム側でPEAR:Cache_Liteとかを活用するといいかと思います。
httpd(Apache)の1プロセスあたりの負荷を減らす
Apacheの不要なモジュールの読み込みを停止することで、Apache1プロセスあたりの負荷を減らします。例えばメモリ消費を1プロセスで数MB減らせれば、100Client時に全体で数百MB減らしたことになります。設定は「最低限やっておくといいApacheチューニング」を参考にしてください。
HTTPリクエストを減らす
Expiresの設定
画像やFlash、CSS、JSなど、ほとんど変更しないコンテンツのブラウザキャッシュ期間を長くすることで、HTTPリクエストを減らします。設定は「最低限やっておくといいApacheチューニング」を参考にしてください。
画像やJavaScript、CSSを別のサーバに切り出す
別途サーバを借りて、画像やJavaScript、CSSをそちらに配置すれば、HTTPリクエストをかなり減らすことができます。サブドメインを使って、resources.smart-hacks.com/images/hogehoge.png とか、resources.smart-hacks.com/js/fugafuga.jsとかやるといいと思います。
その他
.htaccessを使わない
.htaccessを使うとだいぶ遅くなるので、.htaccessを使わずにhttpd.confを使った方がいいです。1.2〜1.3倍くらい処理が速くなったりします。
DirectoryIndexを適切に記述する
index.*などワイルドカードを使うと遅くなります。また、先に書いたものから参照されるので、phpベースのサイトでインデックスページがほぼすべてindex.phpなら、「DirectoryIndex index.html index.php」と書かずに「DirectoryIndex index.php index.html」と書いた方が速いです。
その他、Webサイトの負荷低減(パフォーマンス向上)については、「ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール」と「続・ハイパフォーマンスWebサイト ―ウェブ高速化のベストプラクティス」がすごく参考になります。
ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール
続・ハイパフォーマンスWebサイト ―ウェブ高速化のベストプラクティス
- サーバ全体の負荷を減らす
- キャッシュを利用する
- httpdの1プロセスあたりの負荷を減らす
- HTTPリクエストを減らす
サーバ全体の負荷を減らす
基本中の基本です。Webサーバとして不要なプロセスを停止させることで、サーバ全体の負荷を減らします。さくらVPSとかだと、最初から不要なプロセスはほとんど停止されているので、あまり気にしなくてもいいかと思います。
一からインストールする場合は、以下のページがすごく参考になります。
CentOSをサーバーとして活用するための基本的な設定 - さくらインターネット創業日記
キャッシュを利用する
キャッシュを活用すれば、Webページの読み込みが速くなるだけでなく、サーバの負荷も軽減できます。PHPを使っているならAPCがベストです。APCの導入方法は「さくらVPSでWebサーバを構築するテンプレ」を参考にしてください。「pecl install APC」で入れると面倒なので「yum install php-pecl-apc」の方をオススメします。
他にもプログラム側でPEAR:Cache_Liteとかを活用するといいかと思います。
httpd(Apache)の1プロセスあたりの負荷を減らす
Apacheの不要なモジュールの読み込みを停止することで、Apache1プロセスあたりの負荷を減らします。例えばメモリ消費を1プロセスで数MB減らせれば、100Client時に全体で数百MB減らしたことになります。設定は「最低限やっておくといいApacheチューニング」を参考にしてください。
HTTPリクエストを減らす
Expiresの設定
画像やFlash、CSS、JSなど、ほとんど変更しないコンテンツのブラウザキャッシュ期間を長くすることで、HTTPリクエストを減らします。設定は「最低限やっておくといいApacheチューニング」を参考にしてください。
画像やJavaScript、CSSを別のサーバに切り出す
別途サーバを借りて、画像やJavaScript、CSSをそちらに配置すれば、HTTPリクエストをかなり減らすことができます。サブドメインを使って、resources.smart-hacks.com/images/hogehoge.png とか、resources.smart-hacks.com/js/fugafuga.jsとかやるといいと思います。
その他
.htaccessを使わない
.htaccessを使うとだいぶ遅くなるので、.htaccessを使わずにhttpd.confを使った方がいいです。1.2〜1.3倍くらい処理が速くなったりします。
DirectoryIndexを適切に記述する
index.*などワイルドカードを使うと遅くなります。また、先に書いたものから参照されるので、phpベースのサイトでインデックスページがほぼすべてindex.phpなら、「DirectoryIndex index.html index.php」と書かずに「DirectoryIndex index.php index.html」と書いた方が速いです。
もっと高度なテクニックについて
その他、Webサイトの負荷低減(パフォーマンス向上)については、「ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール」と「続・ハイパフォーマンスWebサイト ―ウェブ高速化のベストプラクティス」がすごく参考になります。
ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール
- HTTPリクエストを減らす
- CDNを使う
- Expiresヘッダを設定する
- コンポーネントをgzipする
- スタイルシートは先頭に置く
- スクリプトは最後に置く
- CSS expressionの使用を控える
- JavaScriptとCSSは外部ファイル化する
- DNSルックアップを減らす
- JavaScriptを縮小化する
- リダイレクトを避ける
- スクリプトを重複させない
- ETagの設定を変更する
- Ajaxをキャッシュ可能にする
続・ハイパフォーマンスWebサイト ―ウェブ高速化のベストプラクティス
- Ajaxアプリケーションとパフォーマンス
- 応答性の高いウェブアプリケーション
- 初期ロードの分割
- 実行をブロックしないスクリプトのロード
- 非同期スクリプトの組み合わせ
- インラインスクリプトの適切な位置
- 効率的なJavaScriptコード
- Comet
- gzip圧縮再考
- 画像の最適化
- 主ドメインの細分化
- ドキュメントのフラッシュ
- iframeの取り扱い
- CSSセレクタの単純化