使用言語ruby
EC2インスタンス上(Amazon linux)で
S3にあがってるgzファイル(展開後10Gくらい)をDLしてきて展開、
File.open('ファイル名').do |f|
いちぎょうずつしょり
end
ってやったら、openにブロック渡すと閉じたときに勝手にcloseしてくれるはずなのに
プロセス終了後もtopで見たときのuse memoryが10G食いっぱなしだった。
ローカルでrubyでやっても再現せず。
なのでシェルで10Gほどのファイルを生成するスクリプト組んで試してみたら、
やはりプロセス終了後もmemory食いっぱなし。
なおどちらの場合もファイルを消すとmemory復活する。
ファイルはいったん全部メモリにもってどっかのタイミングで実体作って解放、みたいなことやってる?
プロセスが終了してもページキャッシュが保持されているだけだった。
amazon linuxのpdflushのタイミングがcentosデフォルトのやつと違うだけかひょっとして。
ほぼ一緒だった。と、するとなぜだ…?
語弊があった
dirty_backgroud_ratio
dirty_ratio
dirty_expire_centisecs
dirty_writeback_centisecs
min-free-kbytes
このあたりの設定値がほぼ変わりなかったというだけ
echo 1 > /proc/sys/vm/drop_caches
でメモリが解放される以上、ページキャッシュではあろう。
■2016/12/28 追記
通常、ストレージと同期が取れた時点で(vmstat -a のinact領域)「捨てて良い」メモリとなって、
別の何かからメモリの要求が来れば勝手に解放してくれるはず。
なのにうまくいってないのはinactになるのが遅いとかそういうのか?