Kenichi Maehashi's Blog

脳内コアダンプ

RSS
Category: Computer
追記: なんかごちゃごちゃしたのでまとめ直しました。

LM for Mac OS X のメモリ使用量が増えていくというご指摘をいただきました。(ありがとうございます!)

早速調べてみたところ... こんな感じでした
※横軸が時間 (1.00 min / div)、縦軸が leak している memory の量 (1 分のちょっと手前の、一番高い三角形が 14 KB 程度)。
※LM を起動して連携状態に設定し、AppleScript で tell application "iTunes" to next track を無限ループしてテスト。

開発環境 (REALbasic) の AppleEvent 実装に「一つの AppleEvent instance を何度も使い回して Send すると memory leak する」という bug があるようです。2007 Release 5 と 2009 Release 5.1 (最新版) で再現したので、REAL Software に bug report を提出しておきました(Case ID: 10930。専用の Feedback アプリケーションがインストールされていないと見られません)。

想像ですが、Rb のフレームワークが AppleEvent の戻り値を書き込むときに、前に書いてある object を free せずに上書きしているのでしょう。

ということで、取り敢えず Send するたびに別の AppleEvent instance を生成すれば良さそうですね。修正後のサンプル結果はこんな感じになりました。

まだ若干漏れてるじゃん、という話なのですが、これはまた別の問題のようです。
使っていくうちに酷くなっていく種類のものではないし、900 bytes 程度なので、許容範囲ということで(というか Rb のフレームワーク側の問題っぽいので対処法が分からない...)。

 *

この修正は次回のリリースで反映される予定です。
早く出した方が良いのか、ちょっと待ってからがいいのか、悩みどころ。困っている方がおられたら仰ってくださいね。

# なお、AppleEvent の bug なので Windows 版には影響がないハズです。

Comments

inshin
2010/01/04
こんにちわ。
LM側の設定を書き忘れていました。
すべてのサイトを検索し、曲に歌詞がつけられていない場合は確認なしに最高ランクの検索結果に自動確定したものを設定するように設定してあります。
使うときはいつもLMを隠した状態にしておき、iTunesを表示させた状態で使っています。
同じ曲をループで再生してお同じ現象が観測されます。
また、余計なことかもしれませんが、MacKeyHoleTVでも同じ現象がありました。そちらのソフトは映像と音声を扱う関係上、数分の視聴ですぐにメモリがいっぱいになり、他のソフトがほぼ応答なしの状態になっていました。問題を報告すると、ライブラリのアッパーコンパチビリティがないために起こっている現象だったそうで、現在は10.6test版にて修正されています。
よろしくお願い致します。
2010/01/05
ご返事ありがとうございます。

> 正確に調べていませんので大雑把な数字になってしまいますが、約5時間の連続再生で約2GBあった空きメモリがなくなってしまいました。
> 1曲平均約4分とすると、約75曲ほど再生したことになります。

計測結果から 1 分間に 100 KB ずつ leak があると推定して、5 時間連続再生であれば 30 MB 弱なので、少しおかしいですね。
Leopard と Snow Leopard で試しているのですが、症状が再現できていません。

取り急ぎ、メモリリークだけ取り除いたバージョンを作ったので、お試しいただけますでしょうか。

http://blog.kenichimaehashi.com/up/LyricsMaster2201_Mac_Devel_1.zip

よろしくお願いいたします。
inshin
2010/01/05
修正版どうもありがとうございます。
iTunesとLyrics Masterを起動しっぱなしのままでMac終了しないで何日も使い続けたり、途中で閉じてスリープさせたり、ウェブサーフィンしたり、ToastでCD焼いたりと、Lyrics MasterはMacログイン時に自動的にiTunesと一緒に開くようにしているので、使っているうちにどの段階で何をしてメモリが増え始めたのかがつかめていません^^;
最近メモリ使用量が気になって観測し始めてからはGB単位のメモリはまだ食っていません。。。もう少し探ってみます。
よろしくお願い致します。
2010/01/06
了解しました。
何かお気づきの点がありましたらまたお知らせいただければ幸いです。
inshin
2010/01/06
修正前バージョンでもう一度確認したところ、アクティビティモニタではLyrics Masterのメモリ使用量が実メモリ55.1MB、仮想メモリ81.4MB、メモリ全体の空きが7MBのときにLyrics Masterだけを終了すると、全体の空きが1.58MBに増えます。(ちなみにLyrics Masterの代わりに他のソフトを終了した場合はアクティビティモニタで表示された使用した量のメモリしか空きが増えません)
何がメモリを占有しているのかが不明です。。。
修正版を使ってまた試してみます。
よろしくお願い致します。
inshin
2010/01/07
修正版を使っても同じようです。
アクティビティモニタのスクリーンショットがこちらです。
終了前:
http://lmbugreport.inshin.net/home/s2010-01-06_18.33.30.png
終了後:
http://lmbugreport.inshin.net/home/s2010-01-06_18.33.52.png
もし必要であれば、手順などを教えていただければ詳しくサンプルを取ります。
よろしくお願い致します。
2010/01/10
ご返事遅くなり申し訳ありません。
また、詳細についてお知らせいただきありがとうございます。

おそらく開発環境の問題と思われるので、開発環境のバージョンをアップデートすることにしました。
ただ、旧バージョンの開発環境と互換性が無くなっている部分が多く、対応に少し時間がかかりそうです。

新バージョンに対応でき次第ベータ版として本 blog にて公開すると思いますので、今しばらくお待ちいただけますでしょうか。
もしよろしければ、ベータ版公開の折に、上記 Site に記載のメールアドレスまでお知らせさせていただきます。

しばらくご迷惑をお掛けいたしますが、よろしくお願いいたします。
inshin
2010/01/10
度々すみませんが、よろしくお願い致します。
Leave Yours...
Name:
E-mail / URL (optional):
Comment:
Are You Robot?: