« 昔のタモリはすごかった | メイン | Appleの新しいキーボードを買ってみた »

残り空きメモリ監視AppleScript「Freemem Monitor」作成

- MacOSX

<追記>
新バージョン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

web拍手とは

トラックバック

このエントリーのトラックバックURL:
http://soap.s216.xrea.com/umu/mt/mt-trackback-script.cgi/1217

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

最近のコメント

最近のトラックバック

アーカイブ

クリエイティブ・コモンズ

Creative Commons License
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.
Powered by
Movable Type