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

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

- MacOSX

<追記>
勝手にRelease Memoryが走る新バージョンFreemem Keeperを作成しました。こちらも合わせてご利用下さい。
空きメモリ確保AppleScript「Freemem Keeper」作った (うむらうす)
</追記>

<また追記>
Snow Leopardに対応しました。
</また追記>

<更に追記>
今ごろLeopard対応しました。ついでにGrowlにも対応させました。('08/8/20)
</更に追記>

<また更に追記('08 Sep)>
アイコンを作っていただきました。 こちらのページのものも、アイコン付きのものに変更しました。
</また更に追記>

以前、解放されていない不使用のメモリを解放することで、 スワップファイルが作られにくくしようというエントリーを書いた。
スワップファイルをなくそう4 (うむらうす)

ここで、解放されていない不使用メモリを解放するAppleScript「Release Memory2」 を作成し、アップしたのだが、これは手動で気付いたときに実行するようにしかなっていなかった。 つまり、空きメモリが減ってきたことを自分で察知して自分で起動する必要があった。 例えば、私の場合は、MenuMetersで空きメモリを視界の端でにらみつつ、 危なくなってきたら上記のRelease Memory2を走らせていた。

しかしうっかり残りメモリが減っているのを見逃してしまうと、 隙をついてスワップファイルが3つ4つ作られてしまったりする。 これではせっかくメモリを解放できるようになっても、意味がない。 目視で観察していてもダメだ。機械に監視させねばならぬ。

ということで、コメントで紹介頂いたMXanadu氏作成のAppleScript「Memory Statistics」をベースに、 残りの空きメモリが少なくなってきたら警告を発し、 ついでにRelease Memory2と連携して起動させるAppleScriptを作ってみようと思った。

で、作った。(協力:MXanadu氏)

Tiger用
ダウンロード:Freemem_Monitor.zip

Leopard用ダウンロード:
FreememMonitor_wakaba_Small.pngwakabaさんアイコンver
Freemem_Set_for_Leopard(wakaba).zip
Edm2_White_Large.pngEdm2さんアイコンver
Freemem_Monitor_for_Leopard(Edm2).zip

zipファイルを解凍すると、「Freemem Monitor」とか他のものも入っているので、好きなものをどうぞ。(Growl)と付いているものはGrowlで通知するもの、ついていないものはDialogで通知するもの。
<追記>
複数置いてあるが、アイコンが違うだけで、効果は同じ。 お好きなものをお使いください。
</追記>

使い方:
1.Freemem Monitorを起動
2.空きメモリが何MB以下になったら警告するかを設定
3.あとは放っておく。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

コメント (15)

KKC:

今更な感が漂いますが、このFreemem Monitorの中身のRelease Memory2はleopard対応型でしょうか??

haru:

KKCさん、どうもです。

現状の中身のRelease Memory2は、Leopardには対応していません。

中身見てみたらできそうなので、少々お待ちください。
Freemem Keeperと共にLeopard対応させちゃおうと思います。

それまではRelease Memory for Leopardの方をご利用ください。

XXC:

haruさん

返信ありがとうございます。
Leopard対応のFreemem Keeper、楽しみに待っています。

haru:

XXCさん

ということで、Freemem Monitor、Freemem Keeper共にLeopard対応させました。

微妙にお名前が変わっているようですが、ご本人ですよね。

KKC:

haruさん

素早すぎる対応、少々びっくりしています。
早速使わせていただきます。

自分も名前が変わっている事をharuさんの指摘で気づきました・・・。確かに本人でした。

KKC:

haruさん

連投申し訳ありません。

早速leopard対応版をダウンロードして使おうと思いましたら、フォルダに「Freemem Monitor for Leopard.app」しか入っていませんでした。こんなものかと思い、とりあえず使ってみようと思い、起動してみたところエラーが返ってきました。

お手数ですが解決法などをお教えください。

haru:

KKCさん

どんなエラーでしたか?
一応心当たりのある部分は直しておきました。まだだめでしょうか・・・

KKC:

haruさん

きちんと症状も書かずに訪ねてしまい申し訳ありません。

症状としましてはFreemem…を起動するとまず、
The variable temp_delim is not defined.
Edit OK
といったダイアログが現れ、OKを押しても数分後にまた現れるといった症状です。

機能としては問題はなさそうですが、上記のような症状が現れます。
無視しても大丈夫なものでしょうか??

haru:

KKCさん

いえ、無視しない方がいいと思います。こちらでも再現しました。Freemem Monitorの方ですよね?

ちょっと手直ししてみました。試してみていただけますか?

KKC:

haruさん

最新版、試してみました。どうも同じような結果が帰ってきますね。

確認なのですが、/usr/library/Scriptsに「Release Memory for Leopard.scpt」と「Freemem Monitor for Leopard.app」を放り込んで「Freemem Monitor for Leopard.app」を起動、という方法であっていますか?

haru Author Profile Page:

KKCさん

いろいろ気付いてまたアップデートしました。これで大丈夫かと思います。お手数ですが再度試してみてください。

ちなみに、Freemem Monitor for Leopard.appは単体で動作します(Release Memory for Leopardの機能を含んでいます)。他のものはなくても大丈夫です。

KKC:

haruさん

最新版、ダウンロードして試してみました。
前回のようなエラーも帰ってこず、何の問題もなく動いています。

何度も対応していただき、ありがとうございました。愛用させていただきます。

haru Author Profile Page:

KKCさん

よかったー。
何度も手間をかけさせてしまいすみませんでした。私自身もRelease Memoryの方を使っていたのですが、今回作ったのでMonitorの方を使ってみてます。Keeperよりも自分で起動タイミングを選べるこちらの方がいいですね。

KKC:

haruさん

本当にありがとうございました。
ところで、一つうまくいけば欲が出るのか、可能であればのお願いがあります。

Monitor、常駐させることが多いと思いますので、スクリプトのアイコンではいささか色気がないように思います。

これほどの性能を持つMonitorですので専用のアイコンでも作成してみてはいかがでしょうか。

haru Author Profile Page:

KKCさん

いえいえ、こちらこそ適当な公開で手間を取らせてしまいすみませんでした。

で、アイコンについてですが、確かに私も専用のがあったらかっこいいなぁと思うのですが・・・どうやってつくんの?的な感じです。

とりあえず誰か作ってくださる神のような人を募ってみることにします。無反応だったら・・・

コメントを投稿

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

最近のトラックバック

アーカイブ

別館(annex)との統合フィードを取得
[フィードとは]
Add to Google
はてなRSSへ追加
My Yahooへ追加
Livedoorへ追加
gooへ追加
購読する Bloglines


Powered by FeedBurner

メールで購読
メールアドレスを入力してください:

配信: FeedBurner


このブログ単独のフィードを取得

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

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