UNIX的なアレ:gihyo.jp出張所

第16回知っておきたいApacheの基礎知識 その12

今回は、mod_cacheを利用したApacheのパフォーマンスチューニングについて解説します。

mod_cache

Webサーバをチューニングしていると確実にやらなければならないのがパフォーマンスチューニングです。当然、同じWebサーバといえど用途はさまざまですね。たとえば、静的なコンテンツのみを配信しているような場合ですと、プロセス数やスレッド数のチューニングになることでしょう。

しかしその他、動的にコンテンツを返しているような場合もあると思います。そのようなときは、キャッシュをさせることで大幅なパフォーマンス向上をはかることができるのです。

Apache2では、標準でキャッシュさせることのできるモジュールが同梱されています。今回はapacheをつかって簡単にキャッシュをすることのできる、mod_cacheを紹介していきたいと思います。

モジュールを組み込む

それではApacheのモジュールを見てみましょう。mod_cacheはデフォルトでは組み込まれませんので再度ソースからコンパイルする必要があります。なお、mod_cacheはキャッシュを保存するストレージを選択することができます。メモリに保存する方法とDiskに保存する方法です。

今回は上記の両方のモジュールも一緒に組み込んでいきます。下記のコマンドを実行してください。なお、${APACHE_SRC_DIR}はapacheをコンパイルするときに利用したソースのディレクトリを指しています。

$ sudo /usr/local/apache2/bin/apxs -a -i -c \
  ${APACHE_SRC_DIR}/modules/experimental/mod_cache.c \
  ${APACHE_SRC_DIR}/modules/experimental/cache_util.c \
  ${APACHE_SRC_DIR}/modules/experimental/cache_storage.c

$ sudo /usr/local/apache2/bin/apxs -a -i -c \
  ${APACHE_SRC_DIR}/modules/experimental/mod_mem_cache.c \
  ${APACHE_SRC_DIR}/modules/experimental/cache_cache.c \
  ${APACHE_SRC_DIR}/modules/experimental/cache_hash.c \
  ${APACHE_SRC_DIR}/modules/experimental/cache_pqueue.c

$ sudo /usr/local/apache2/bin/apxs -a -i -c \
  ${APCHE_SRC_DIR}/modules/experimental/mod_disk_cache.c

正常にモジュールのコンパイルが完了したら、modulesの下に作られたかどうかを確認してみましょう。

$ ls -l /usr/local/apache2/modules/mod*cache*
-rwxr-xr-x 1 root root 42209 2009-04-05 15:26 /usr/local/apache2/modules/mod_cache.so
-rwxr-xr-x 1 root root 43473 2009-04-05 15:26 /usr/local/apache2/modules/mod_disk_cache.so
-rwxr-xr-x 1 root root 46251 2009-04-05 15:26 /usr/local/apache2/modules/mod_mem_cache.so

上記の3つのファイルができていれば成功です。

cacheのモジュールを利用する

それでは正常にモジュールがコンパイルできていることが確認できたら、早速VirtualHostに設定をしてみましょう。

httpd.confのVirtualHostの設定を以下のように記述してください。

LoadModule cache_module modules/mod_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so

<VirtualHost *:80>
    DocumentRoot /usr/local/apache2/vhosts/www.example.com/htdocs
    LogLevel debug
    ErrorLog /usr/local/apache2/vhosts/www.example.com/logs/error_log
    CustomLog /usr/local/apache2/vhosts/www.example.com/logs/access_log common

    # Cacheされたファイルを設置する場所を指定
    CacheRoot /usr/local/apache2/cache
    # キャッシュするURLパスを指定
    CacheEnable disk /
    # キャッシュするファイルの最低のサイズ
    CacheMinFileSize 0
    # キャッシュするファイルの最高のサイズ
    CacheMaxFileSize 64000
    # キャッシュしたファイルをおくディレクトリの最高の深さ
    CacheDirLevels 5
    # キャッシュしたファイルをおくディレクトリ名の長さ
    CacheDirLength 3
</VirtualHost>

さて、上記のとおりhttpd.confを記述できたらキャッシュ用のディレクトリを用意しておきましょう。上記の例では、⁠/usr/local/apache2/cache⁠をキャッシュ用のディレクトリとして使用しています。また、そのディレクトリはApacheからWrite可能なパーミッションにしておく必要があります。

 $ sudo mkdir -p /usr/local/apache2/cache
 $ sudo chmod 777 /usr/local/apache2/cache

さて、上記の作業が完了したら、ブラウザからドキュメントルートに置いてあるページへアクセスしてください。無事設置したページが確認できたら、今度はキャッシュが生成されたかを確認してみましょう。先ほど作成したキャッシュ用のディレクトリにfindをかけてみます。

$ sudo find /usr/local/apache2/cache 
/usr/local/apache2/cache
/usr/local/apache2/cache/ZaL
/usr/local/apache2/cache/ZaL/3ba
/usr/local/apache2/cache/ZaL/3ba/X0t
/usr/local/apache2/cache/ZaL/3ba/X0t/q82
/usr/local/apache2/cache/ZaL/3ba/X0t/q82/LJV
/usr/local/apache2/cache/ZaL/3ba/X0t/q82/LJV/lefjfhA.data
/usr/local/apache2/cache/ZaL/3ba/X0t/q82/LJV/lefjfhA.header

上記のように、ディレクトリとファイルがそれぞれ生成されていればキャッシュがされたことになります。拡張子が.dataとなっているファイルの中はキャッシュされたファイルの中身が直接記載されていますので確認してみてください。

いろいろな用途に使えるCache

Cacheといえば大規模サイトを構築する際には現在においてはほぼ必要不可欠なものとなりました。Cacheを導入することで、劇的に負荷を減らすことができた…という状況も決して珍しくはありません。本格的なCacheサーバを構築する場合であれば、Squidなどを使うのがよいと思います。

しかし、既存でインストールされているapacheを有効活用して手軽にCacheされるといった方法をとる場合もあるでしょう。そのような手軽に利用する際にも、mod_cacheは有効に使うことができるのではないでしょうか。

さて次回は、mod_cacheをProxyサーバとして利用するケースを紹介していきたいと思います。

おすすめ記事

記事・ニュース一覧