Nginxのリバースプロキシのキャッシュ置き場をRAMディスクにする
前回の記事でDisk I/OがボトルネックになっていてLoad Averageが上がっていたため、I/Oを減らす対策を行う、というのが今回のネタ。
Nginxでリバースプロキシのキャッシュをオンメモリで持つやり方を調べてたらあまりいい情報が無かったので、 キャッシュディレクトリをRAMディスクにすることで対応しました。
Nginxの設定
$ sudo vi /etc/nginx/nginx.conf
...
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=one:4m max_size=1000m inactive=120m;
...
proxy_cache_pathのmax_sizeはRAMディスクの容量に合わせておきます。今回はRAMディスクを1GB(1024MB)で作る想定で、1000mにしました。
(差の24MB分はカツカツで使って何かトラブルがおきたら嫌だなと思ったので保険)
RAMディスクを作る
Linux上のRAMディスクはtmpfs
とramfs
があるようですが、
tmpfs
の方がディスクがいっぱいになったりOSがメモリ不足になった時に融通を利かす(らしい)ので、
今回はtmpfs
の方を使います。
$ sudo vi /etc/fstab
tmpfs /var/cache/nginx tmpfs size=1024m,mode=700,uid=www-data,gid=root 0 0
fstabにRAMディスクの仕様を書きます。
sizeは1024MB、権限まわりは元の/var/cache/nginxに合わせておきました。
NginxのキャッシュディレクトリをRAMディスクに置き換える
$ sudo /etc/init.d/nginx stop
$ sudo rm -rf /var/cache/nginx/*
一旦Nginxを止めて、キャッシュを全削除します。
$ sudo mount /var/cache/nginx
$ sudo /etc/init.d/nginx start
そして、RAMディスクをマウントして、Nginxを起動。
これで完了。お手軽。