<追記>
新バージョンFreemem Keeperを作成しました。こちらをご利用下さい。
→空きメモリ確保AppleScript「Freemem Keeper」作った (うむらうす)
</追記>
以前、解放されていない不使用のメモリを解放することで、
スワップファイルが作られにくくしようというエントリーを書いた。
→スワップファイルをなくそう4 (うむらうす)
ここで、解放されていない不使用メモリを解放するAppleScript「Release Memory2」 を作成し、アップしたのだが、これは手動で気付いたときに実行するようにしかなっていなかった。 つまり、空きメモリが減ってきたことを自分で察知して自分で起動する必要があった。 例えば、私の場合は、MenuMetersで空きメモリを視界の端でにらみつつ、 危なくなってきたら上記のRelease Memory2を走らせていた。
しかしうっかり残りメモリが減っているのを見逃してしまうと、 隙をついてスワップファイルが3つ4つ作られてしまったりする。 これではせっかくメモリを解放できるようになっても、意味がない。 目視で観察していてもダメだ。機械に監視させねばならぬ。
ということで、コメントで紹介頂いたMXanadu氏作成のAppleScript「Memory Statistics」をベースに、 残りの空きメモリが少なくなってきたら警告を発し、 ついでにRelease Memory2と連携して起動させるAppleScriptを作ってみようと思った。
で、作った。(協力:MXanadu氏)
ダウンロード:Freemem_Monitor.zip
zipファイルを解凍すると、「Freemem_Monitor」というディレクトリが生成し、 その中に「Freemem Monitor」と「Release Memory2」のスクリプトがあるはず。 これらはアプリケーションバンドルとして保存されているので、ダブルクリックで起動するタイプ。
使い方:
1.この二つのファイルを好きな場所(同じフォルダ内)に置く
2.Freemem Monitorを起動
3.空きメモリが何MB以下になったら警告するかを設定
4.あとは放っておく。Freemem Monitorは1分置きに空きメモリをチェックし、
設定容量以下になったら以下のようなプロンプトを表示する

選択肢「Run!」「No」「Quit」はそれぞれ、Release Memoryを呼び出す(監視も続行)、
呼び出さない(監視は続行)、監視をやめFreemem Monitorを終了する、という動作。
まだRelease Memor終了後にエラーが出たりと完成していないが、 とりあえずさらしてみる。 コメント等大歓迎。
ソースは以下の通り。MXanaduさんありがとうございます。
set temp_delim to AppleScript's text item delimiters --Free memoryリミット値(MB)の設定 --propertyでなくても、ハンドラ内でglobal宣言すればOK set alarm_size to text returned of (display dialog "Input the limit memory size(MB)." default answer "200") --リミット値をページ単位に換算 (1024^2)/4096=256 set alarm_pages to alarm_size * 256 --監視間隔(秒)の設定 property waiting_interval : "60" on idle --Mach Virtual Memory Statistics(vm_stat)から空きメモリページ数を取得 global alarm_pages, alarm_size set AppleScript's text item delimiters to return set vm_stats to do shell script "vm_stat | grep Page" set free_mem to text item 1 of vm_stats set AppleScript's text item delimiters to " " set free_size to (last text item of free_mem) as number --アラーム処理 if free_size is less than alarm_pages then set Btn to (display dialog "Free Memory is less than " & alarm_size & "MB!" & return & "Run Release Memory script?" buttons {"Run!", "No", "Quit"} default button 1) if button returned of Btn is "Run!" then try tell application "Release Memory2" activate end tell on error msg number errno activate display alert msg message "Error Number : " & errno end try end if if button returned of Btn is "Quit" then tell me to quit end if return waiting_interval end idle set AppleScript's text item delimiters to temp_delim
何分おきというように周期的に動かすには、スクリプト保存時に設定が必要。

「実行後、自動的に終了しない」をチェックするのがポイント。
まとめ
- 目視で空きメモリをチェックしていると、うっかり見逃しがちなので、プログラムに監視させることにした。
- そのプログラムからRelease Memoryを起動できるようにした。
- まだエラーが出るのでいつか直す。
- Growlと連携とかできそうなので、気が向いたらするかも
<追記>
スクリプトを紹介して頂いた。まいどどうもです。m(_*_)m
muta's mac scribbling - OS運用記録9月4







