WordPress高速化: NginxのプロキシキャッシュをRAMディスクに移す

前回はWordPressプラグインの変更によるWordPress高速化の結果を紹介しました。

今回はもう少し高速化を目指してWebサーバの調整をしたいと思います。

Nginxのプロキシキャッシュ

このブログではWebサーバにNginxを使用しています。

このNginxにはプロキシキャッシュ機能があり、この機能を使うことによってWebのレスポンスをあげることができます。

今回は更なるWordPressの高速化のために、nginxのプロキシ・キャッシュ機能を使ってみます。 なかなか設定が難しいですが、何とか設定に成功してWordPressが動作するところまでこぎつけました。
今回はプロキシ・キャッシュ機能を有効にしたnginxでWordPressを実行した場合の性能を評価しました。 プロキシ・キャッシュを有効にする前と比べると10%近くの性能向上が望めることがわかりました。

このプロキシキャッシュ機能は、Webサーバのレスポンスを一時的にディスクに保存しておいて、2回目以降のアクセスではそのディスクにあるレスポンスを返します。

従って、2回目以降のアクセスではWordPressの処理がなくなるのでレスポンスがよくなるという訳です。

しかし、WordPressの処理がなくなる代わりに、ディスクへの読み書きが多くなるという副作用もあります。

ディスクの読み書きは処理に時間がかかるほか、他のプロセスの処理を妨げることにもなり全体的な性能を落とす可能性が出てきます。

RAMディスク導入

今回はこの副作用を避けるためにRAMディスクを導入してみます。

RAMディスクであればデータの読み書きが発生してもHDDの読み書きが発生しないため、他の処理を妨げることがなくなります。

実は以前に同じ目的でRAMディスクを導入したことがあります。

今回はnginxのプロキシ・キャッシュ用のディレクトリをRAMディスクとすることにより、WordPressの更なる高速化に挑戦したいと思います。使用しているVPSであるServersMan@VPSでディスクが遅いときがあるので、RAMディスクにすることで高速化が期待できます。
今回はnginxのプロキシキャッシュ用ディレクトリにRAMディスクを使った場合の効果を計測します。 測定によって誤差はあるものの、性能の向上は確認できます。メモリがあまっている場合は積極的にRAMディスクを使用したいものです。

しかし、OSのアップデートなどでRAMディスクの設定が消えてしまったらしく、今回やり直すことにしました。

RAMディスクの確認

最近のLinuxではデフォルトでRAMディスクが有効になっていることが多いと思います。

dfコマンドでRAMディスク(tmpfs)がマウントされてるディレクトリとサイズを確認しましょう。

$ df -h  | grep tmpfs
tmpfs            202M   21M  181M   11% /run
tmpfs           1006M  129M  878M   13% /dev/shm
tmpfs            5.0M     0  5.0M    0% /run/lock
tmpfs           1006M     0 1006M    0% /sys/fs/cgroup
tmpfs            202M     0  202M    0% /run/user/1000

多くの場合は/dev/shmに実メモリの半分ぐらいのサイズのRAMディスクがマウントされているはずです。

今回は面倒なのでここを使ってしまうことにします。

プロキシキャッシュの設定変更

/dev/shmにRAMディスク(tmpfs)がマウントされていることがわかったら、Nginxの設定を変更します。

/etc/nginx/sites-availableにある設定ファイルのproxy_cache_pathを変更します。

proxy_cache_path  /dev/shm/nginx/scratchpad.jp levels=1:2 keys_zone=scratchpad.jp:64m inactive=4h max_size=128m;

変更点はキャッシュに使うディレクトリを /dev/shm/nginx以下にしたことです。

ファイルを変更したらこの変更を反映させます。

$ sudo service nginx reload

これで完了です。

RAMディスクを利用する効果

RAMディスクを使うようにしてみたところ、体感ではそれほど差は感じません。

しかし、HDDのレイテンシ(読み出しが待たされる量)のグラフを見ると、RAMディスクの利用前後で大きく変わっていることがわかります。

ディスクのレイテンシ

グリーンのグラフがそれまでキャッシュを保持していたHDDなのですが、キャッシュをRAMディスクに逃がした以降はレイテンシが低下していることがわかります。

これは他のプログラムが動作する場合に待たされることが減ったと言うことです。

もちろんWordPressが待たされる時間も減るはずなので、少しはレスポンスは向上している・・・はずです。

まとめ

今回はWordPressの高速化を目指してNginxのプロキシキャッシュにRAMディスクを使用する設定を行いました。

キャッシュ中のデータをRAMディスクにおくことでHDDのアクセスを減少させることできます。実際にデータを見るとRAMディスクを利用するようになってからディスクアクセスのレイテンシが減少しました。

次回はフリーのファイル復元ソフトEaseUS Data Recovery Wizardを紹介します。