アクセスが激しいサイトを運営していると、Webサーバの処理だけでも大きな負荷がかかります。
しかしさらにそのサーバ上で大きなファイルのアップロードや処理(超解像度の画像処理や大きなzipのアップロードと解凍など)も同時に行っていたら、どうしてもHDDアクセスが追いつかずIOWAITが非常に大きくなってしまいます。
IOWAITが大きくなるとHDDアクセスを行うプロセスのCPU時間が大きくなってしまいサーバ全体が不安定になりダウンに繋がります。
そんな時にメモリの一部を使ってRAMディスクという仮想ディスクを作り、そこでコンテンツ処理をしてしまえばIOWAITを一気に下げる事が可能です。
以下に手順を書きます(/dev/shmは既にアンマウントされている前提です)。
mkdir /var/tmp/ram mount -t tmpfs -o size=10G /dev/shm /var/tmp/ram
これで/var/tmp/ramに10GBの仮想ディスクができました。
忘れずに/etc/fstabにも
/dev/shm /var/tmp/ram tmpfs defaults,size=10G 0 0
と追加しておきます。
ワーキングディレクトリを必要なだけその下に作っていきますが、このディレクトリはマシン再起動で削除されてしまうので、/etc/rc.localにもmkdirその他必要なコマンドを記述しておきます。
そして、ファイルをアップロードする時にはまずRAMディスクにアップロードするようにし、それからRAMディスク上でファイルを処理し、最後に処理結果ファイルをHDDに移動するような処理を書きます。
こうすることで、RAMディスクへの書き込みが速いのでファイルのアップロード自体も高速になりますし、アップロードと処理がHDDに対して負荷を高める事もなくなります。最後のHDDへのファイル移動は圧倒的に高速でIOWAITをほぼ高めません。
Webサーバは裏での処理に関係なく安定し、結果としてユーザからのアクセスにも素早く応答する事ができます。
コメント
[…] ても一ヶ月以内に壊れる!重そうなPHPスケジューリング処理にRAMディスク(参考:http://patio.work/archives/1421)を使っても状況が変わらない!といった現象が起こる事があります。まず、iosta […]