« 陰陽師がステキだ | メイン | 人がいっぱい »

スワップファイルをなくそう4 - Release Memory2 (for Tiger)

- MacOSX

'08 7/3追記)
Release Memory2に、今更ながらGrowl通知版を公開。作ってなかったと気付いておらず。
あとLeopard対応版作りました。
Release Memory for Leopardを作ってみた (うむらうす)

内容
・Release Memory をバージョンアップし、Release Memory2を作った
・「アクセス権の修復」を行うことでも、inactiveなメモリが解放されるので、 その方法を用いるAppleScript
・Script実行時間は格段に短くなった
・DashboardのCache削除機能も追加した
・対応OSはTigerまで

ダウンロード:
Release Memory2.zip
Release Memory2(Growl).zip


以下、詳細説明。

スワップファイル遊撃隊隊員の私です。
以前、スワップファイルができまくって動作がもっさりするのを防ぐため、 解放されていないinactiveなメモリ(リークしている?)を解放するAppleScriptを作ったところ、 各所でいろいろとコメントを頂いた。ありがとうございました。
スワップファイルをなくそう2 (うむらうす)

このスクリプトが何をしているかというと、

  1. Finderの再起動
  2. Dockの再起動
  3. Weekly Maintainance Script実行

を一気に行うということだった。

これはこれで便利に使っていたのだが、先日こちらのエントリーのコメント欄で、 thanksさんに新しいメモリ解放の方法を紹介していただいた。 (後日こちらでも記載されているのを確認した→Apple - Support - Discussions - inactive memory ...

その方法は至って簡単で、「起動ディスクのアクセス権を修復」すること。シンプルだ。 試しにアクセス権修復をやってみると、inactiveで解放されていないメモリ (リークしているメモリと思われる)が確かに解放される。 不思議だが、効果あり。

ということで、このアクセス権の修復によるメモリ解放のAppleScriptも作ってみた。 (参考:macosxhints.com - Run Repair Permissions via an AppleScript

ダウンロード:
Release Memory2.zip
Release Memory2(Growl).zip

上のリンクを左クリック or 右クリックで「リンク先を保存」。 解凍すると(ダブルクリック、あるいはStaffIt Expanderなどを利用)、AppleScriptが生成します。 アプリケーション形式なので、ダブルクリックで起動します。 スクリプトエディターで開けば、ソースが見れます。

以下変更点、相違点など。

  • 所要時間が短くなった
    Weekly Maintainance Scriptでは実行に10分近くかかるのだが、アクセス権修復は1,2分で終わる。圧倒的に後者が早い。
  • FinderとDockの再起動はおまじないとして残しておいた。
  • オマケとしてmutaさんの提案にお応えして、 DashboardのCacheの削除プロセスも追加。
    (参考:macosxhints.com - 10.4: Speed up Dashboard by clearing out its cache)
  • 従って、Scriptの流れは 1. Finder再起動→2.Dock再起動→3.Dashboard Cache削除→ 4.起動ディスクのアクセス権修復
  • MXanadu62さんの指摘を受け、アクセス権修復の管理者権限を省略
  • メモリ解放タイミングが変わった
    Weekly Maintainance Scriptでは、実行後数秒してからメモリが大きく解放され、その後は空きメモリは変化しないままScriptは動き続ける(Locate database, whois databaseを再構築している)。 一方アクセス権の修復では、実行後しばらくは、空きのメモリはむしろ数十MB減るのだが、 終了間際に空きメモリがガサッと増える。(と思ったけどすぐ減るかも。よくわからない。)

ということで、個人的にはこっちの方が早く済むのでオススメ。


まとめ

・「アクセス権の修復」を行うことでも、inactiveなメモリが解放されるので、 その方法を用いるAppleScriptも作った
・Script実行時間は格段に短くなった
・DashboardのCache削除機能も追加した

ということで、新しいものが好みの人は、こちらをどうぞ。

<追記>
各所で紹介して頂いた。ありがとうございます。
わかばマークのMacの備忘録 : Release Memory2  大変詳しく説明してくださっている(ここよりよっぽど詳しい)。参照されたい。
muta's mac scribbling
</追記>

以下ソース。興味のある方はどうぞ。


-- Finder再起動
tell application "Finder"
 quit
 delay 1
 activateFinder() of me
 if exists Finder window 1 then
  activate
  set windowBounds to (bounds of Finder window 1)
  set theFolder to target of Finder window 1
  close Finder window 1
  open theFolder
  set bounds of Finder window 1 to windowBounds
 end if
 
 
end tell


on activateFinder()
 try
  tell application "Finder" to activate
 on error
  activateFinder() of me
 end try
end activateFinder
-- Finder再起動ここまで


-- Dock再起動
do shell script "killall Dock"


--Delete Dashboard cache
do shell script "rm -rf ~/Library/Caches/DashboardClient/*"


-- Run Repair Permissions via an AppleScript - macosxhints.com
-- http://www.macosxhints.com/article.php?story=20030120061404240
-- MXanadu62さんの指摘により管理者権限省略
do shell script "diskutil repairPermissions /" 


display dialog "Release Memory 終了しました!" buttons {"OK"}

web拍手とは

トラックバック

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

コメント (14)

E-WA:

最後から 2 行目ですが、
do shell script "sudo diskutil repairPermissions /"
ではなく
do shell script "diskutil repairPermissions /" with administrator privileges
としないと、管理者パスワードが入力できずにストップしてしまうみたいですが。

E-WAさん

大変ありがとうございます。
前回のScriptでは使っていたのに、もう忘れているとはなんという鳥頭。

ともあれ、直しました。感謝。

thanks:

修正後のAppleScriptを試しました。とっても良いAppleScriptですね。
メモリで泣かされていたMacユーザーにとって最高の贈り物です。

thanksさん

おほめいただきありがとうございます。
もしこういうものが欲しいなーなどとの要望があれば、応えられるかもしれませんので、つぶやいてみるとよいかもしれませんです。

ハルさま、初めまして。

私もSwapファイルに悩んでいた人間の一人です。どうしてできるのかを色々と調べていましたが、目的はSwapファイルが作らせないことだと、このエントリーで気がつきました。

余談になりますが、一応気づいたことを書き留めておきます。

1. inactiveメモリは、当然かもですが、ログアウトでも解放されるようです。私はiBook G3 500MHzなので、数分の放置が必要ですが…。

2.ログアウトもアクセス権修復も、InactiveメモリとFreeメモリのサイズが拮抗している場合は、あまり効果がないようです。効果があるのはFreeメモリが10MBを切った辺りのようです。(これは拙作のAppleScriptにてvm_statの挙動をモニタした結果です)

3.AppleScriptでアクセス権修復を行う場合、単純にdo shell script "diskutil repairPermissions /"で良いのではないかと思います。

いずれにしても、今まで必ずSwapファイルができてしまったソフトを使っても、システム起動時に作られる64MBを超えず、ページアウトも3MB以下で収めることができました。本当に感謝致します。ありがとうございました。


蛇足の蛇足
メモリのモニタはアクティビティモニタでもできるのですが、私のiBookにとって、それ自体負荷になるのでAppleScriptを使っています。下の場所にしばらく置いておきますので、万が一興味があれば拾ってやってください。

http://www10.plala.or.jp/pipedream/archives/Memory_Statistics.zip

MXanadu62さん

盛りだくさんの情報ありがとうございます。お役に立てて何よりです。
さて、お見受けするに私よりも詳しい感じがしますので、私のコメントは適当に聞き流して下さい。

1.おっしゃるとおり、inactiveメモリは解放されそうですね。しかしスワップファイルが残ってしまうのが悩みどころですね。

2.私の理解では、効果があるのはメモリリークを起こしているかどうかだと思ってます。残りのメモリが少ないときには、必然的にリークがおきているからなのではないかと思います(本当のところどうなのかは知りません)。

3.ホントだ・・・なぜか管理者権限必要だと思い込んでました・・・後で直しておきます。

メモリモニタのAppleScriptも軽くて便利ですね。こういう便利なツールがあると、みんなで少しずつ幸せになって行けると思うので、どんどん行ってしまうとよいと思いました。

MXanadu62:

ハルさまへ。

またもや長文のコメントで失礼致します。

> しかしスワップファイルが残ってしまうのが悩みどころですね。

私のiBookでは一度できたスワップファイルが消えた試しがありません。(悲)
本当はフリーメモリが十分大きくなったら消えるはずなのですが…。
ですので、できる直前を狙います。(笑)

> 残りのメモリが少ないときには、必然的にリークがおきているからなのではないかと思います

この辺りは私も良くわかりません。
ただ、Apple純正のCocoaアプリだと、終了した時にinactiveを解放してくれるように思います。
性悪なのはToastとToast付属のCD Spin Doctorです。どちらも動作時にたっぷりとメモリを使い、終了しても解放しません。
それがメモリリークなのか、ソフトの設計が悪いのかは分かりませんが、どうもソフトによるような気がします。

> メモリモニタのAppleScriptも軽くて便利ですね。

ありがとうございます。図に乗って説明書を作ってVectorさんで公開しようかと考え始めました。(苦笑)

MXanadu62さん

どうもいらっしゃい。
>私のiBookでは一度できたスワップファイルが消えた試しがありません。(悲)
>本当はフリーメモリが十分大きくなったら消えるはずなのですが…。
>ですので、できる直前を狙います。(笑)

スワップファイルって消えるべきなんですか?
消えてくれれば虹色カーソルぐるぐるにはならないでしょうに・・・

>ただ、Apple純正のCocoaアプリだと、終了した時にinactiveを解放してくれるように思います。

私の見立てでは、QuickTimeも結構解放し残しがある感じです。Toastもバックアップソフト系もメモリ食べちらかしますね。

いつも正常にメモリを処理してくれるのなら、すぐに解放しなくても別に構わないのですが、結局そうやって残メモリが少なくなっているところで、他のアプリにやられてスワップファイルまみれ、というのがパターンな気がします。

Leopardになって何か変わるんですかね。

ハルさまへ。

コメント欄を掲示板のようにしてしまって済みません。

> スワップファイルって消えるべきなんですか?

フリーメモリというのは誤りでした。ごめんなさい。
Mac OS X 10.4.9に使われているDarwinのソースコード(system_cmds-336.1.8のdynamic_pager.c)にそれらしき表現があるのですが、削除するかどうかは解読できませんでした。
ただ、Pantherのdynamic_pager.cのコメントを翻訳したらしいMLの記事(URLを参照してください)があり、そこでは削除されるとなっています。(翻訳が正しいかどうかは分かりません)

> QuickTimeも結構解放し残しがある感じです。

CarbonはQuickTimeをOS Xに移植する時に考え出された手法だと聞いたことがあります。
まさかとは思いますがMac OS X 10.4.10でもQuickTimeが未だにCarbonだったりするのでしょうか?
#FinderはCarbonらしいですね。(未確認)

> Leopardになって何か変わるんですかね。

4GBを超える物理メモリ領域を扱えるようになるので期待はできますが、アプリも肥大化する可能性があるのでいたちごっこになりそうな気がしますね。

以上、また長くしました。長文癖なのです。笑って許してやってくださいませ。

MXanadu62さん

>コメント欄を掲示板のようにしてしまって済みません。

本物の掲示板は閑古鳥なので全く問題なしです(^_^;)

記事の紹介ありがとうございます。
リンク先の記述の

>swapファイル削除の目安は仮想メモリ残り容量が直近の2つのswapファイル合計サイズより大きくなることだとなってますから、一度大きなものが作られたらなかなか削除されないかもしれませんね。

というところを読むと、swapファイルが作られるとなかなか消えないという実感と一致していますね。

AfloatがCocoaにしか効かないはず、というのを判断基準にしますと、QuicktimeはCocoaみたいです。Finderは効かないのでCarbonみたいですが、正しいのかは知りません。適当ですみません・・・

MXanadu62:

ハルさまへ。

> swapファイルが作られるとなかなか消えない
> QuicktimeはCocoaみたいです。Finderは効かないのでCarbonみたい

私が議論を混乱させてしまったようですね。済みません。

原点に戻って不必要なswapファイルが作られてしまう原因と思われるInactiveメモリの極端な増加(およびFreeメモリの極端な減少)は、CarbonかCocoaかよりも、映像や音声(マルチメディア)を扱うソフトで発生しやすいように思えてきました。

話は変わりますが、もし私がメモリモニタのAppleScriptを公開する場合、Inactiveメモリを効果的に解放する方法が載っているエントリーということで、ぜひ、ここのURLを説明書に含めたいと思いますが、よろしいでしょうか? まだ未定の話なのですが、ご許可戴ければ幸いに思います。

P.S.
このブログの別のエントリーをいくつか拝見しました。ツンデレサーチとか100の質問とか、とても楽しいブログなんですね。

MXanadu62さん

>Inactiveメモリの極端な増加(およびFreeメモリの極端な減少)は、CarbonかCocoaかよりも、映像や音声(マルチメディア)を扱うソフトで発生しやすいように思えてきました。

同感です。バックアップ系もそうですが、単純に扱うデータの量が大きいと、当然メモリの占有量も大きくなるからかなと思ってます。例によって本当かは知りませんが。

>ぜひ、ここのURLを説明書に含めたいと思いますが、よろしいでしょうか? 

もちろんです。いくらでもご自由にどうぞです。

>このブログの別のエントリーをいくつか拝見しました。
>ツンデレサーチとか100の質問とか、とても楽しいブログなんですね。

基本的には弱電波発信系サイトを自負しております。どこでもお好きな部分をお楽しみ下さい。ちなみに100の質問はメインコンテンツです。

ガボ:

こんにちは。
今更なのですが、「Release Memory2」のGrowl版はないのでしょうか?
「Release Memory2」は今やなくてはならないスクリプトなのですが、もしGrowl版があったらうれしいなーなんて・・。

(ちなみに、むかーし、「ペス!」のあたりでBBSの方にコメントさせていただいたことがあります。その時、何て言うHNで書き込んだか定かではないのですが)
とにかく、昔から楽しく拝見&とても参考にさせていただいています。
これからも頑張って下さい〜!

haru:

ガボさん、どうもです。

お名前に何となく覚えがあります。ペス、なつかしいですね。

で、Growl版、早速追加してみました。お好みに合わせてご利用ください。もちろん自己責任で・・・

コメントを投稿

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

最近のトラックバック

アーカイブ

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


Powered by FeedBurner

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

配信: FeedBurner


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

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

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