Cache::FastMmapと仮想メモリ
FastCGIの全プロセスでデータを共有したくて、Cache::FastMmapを使ってみた。
共有のshare fileを使う。
package MyApp::API::Cache; use Cache::FastMmap; my $fastMmap = Cache::FastMmap->new( share_file => '/tmp/sharefile-myapp-fastmmap', );
みたいな形。
これによりサーバー、プロセスのメモリ/仮想メモリ使用量がどう変わるかのイメージが以下:
使用前
top - 09:53:59 ... : Mem: 2097284k total, 251180k used, 1846104k free, ... Swap: 1052248k total, 47064k used, 1005184k free, ... PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 26136 key_amb 17 0 92485 99m 7452 S 0.0 4.9 0:03.25 index.fcgi :
Cache::FastMmap 使用後
top - 09:53:59 ... : Mem: 2097284k total, 232180k used, 1846104k free, ... Swap: 1052248k total, 85064k used, 967184k free, ... PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 26136 key_amb 17 0 130m 80m 7452 S 0.0 4.0 0:03.25 index.fcgi :
以下、まとめ:
問題点
- Cache::FastMmap::newはファイル新規作成時に排他制御しないらしく、上のMyApp::API::Cacheを複数プロセスで同時にuseするとエラーになることがあった。その対処はまた別の記事で。