1.環境と問題
iMac
21.5-inch, Late 2013
プロセッサ 3.1 GHz Intel Core i7
メモリ 16 GB 1600 MHz DDR3
で数値計算を行った.メモリー使用量は
数百MB程度のメモリーを使用×6 + (瞬間的に)1GB程度メモリーを使用=最大で2GB程度
マシン性能から考えて余裕だろうとたかをくくっていたが,
結局2度強制終了するはめになった.
2. 現象
* 一定時間経過後,スワップアウトし始める
* CPUの使用率が100%にならない(10%)程度
* 最終的に応答不能状態に陥る->強制終了
アクティビティーモニターのメモリー観察
* kernel_task が10GB程度メモリーを占拠(何もしない状況では800MB程度)
* メモリー圧縮が8GB程度
* メモリープレッシャーが増大しつづける.
Mavericksから導入されたCompressed memory機能が怪しい!
3.解決
以下自己責任で
Disable compressed memory in Mac OS 10.9 Mavericks?
を参考にターミナルでメモリー圧縮modeを確認する(defaultは4)
$ sysctl -a vm.compressor_mode vm.compressor_mode: 4
1でメモリー圧縮機能を切れるらしいので
$ sudo nvram boot-args="vm_compressor=1"
にして,再起動(なぜか再起動後も4だったので2回もやってしまった・・・)
$ sysctl -a vm.compressor_mode vm.compressor_mode: 1
で vm.compressor_mode: 1 となっている事を確認する.
今のところ再度同じ計算をさせてみると,メモリープレッシャーも起こらないし,
kernel_taskがメモリーを馬鹿食いする事もなくなった.
メモリープレッシャーはマシン性能が悪い場合に威力を発揮するらしいが,
数値計算する上では邪魔な機能だなと思いました.
おまけ
今まで知らなかったのだがターミナルで
$ sudo purge
を実行するとファイルキャッシュがクリアされる.
なんでも,duを行ってもファイルキャッシュが一掃されるらしいのだが,
効果は不明だし時間がかかるのでpurgeで十分な気がする
(少なくともmavericksでは).