プロジェクト

全般

プロフィール

最適化 #564

バグ #198: ダークマターの討伐

ダークマターが潜むプラグインの特定

toshi_a 初音ほぼ6年前に追加. ほぼ6年前に更新.

ステータス:
新規
優先度:
通常
担当者:
対象バージョン:
開始日:
2013-02-13
期日:
進捗率:

0%

プラグイン名:

説明

実装しているとメモリリークするプラグインを特定する

導入済みプラグインの取得方法

以下の方法で導入されているプラグインのインスタンスを取得できる。ただし、現在のdevelopブランチにはバグで「.rb」が末尾についたスラッグのプラグインが生成されてしまう問題があるのでrejectを使う。

Plugin.instances.reject{ |x| x.to_s.end_with?(".rb") }

依存するプラグイン

プラグインには依存関係があり、 親プラグインがロードされないと子プラグインはロードされない 。必ず --plugin オプションには親プラグインも同時に指定する(「--plugin=home_timeline」は誤り。「--plugin=gui,gtk,home_timeline」とする)。
依存関係はspecファイルによってのみ定義されていて、specファイルの内容は以下のようなコードで取得できる

plugins[0].instance_eval{ @spec }

ロードするプラグインを限定する

特定のプラグインだけロードしたい場合は、「--plugin」オプションでスラッグを指定する。複数のプラグインを指定する場合はカンマで区切る。--pluginを二つ以上指定することはできない。

./mikutter.rb --plugin="gui,gtk,rest,streaming,home_timeline,memory_profiler" --debug

この方法でプラグインスラッグを指定すると、そのスラッグにマッチしないプラグインはロードされない。

バージョン

0.2.2(develop ブランチ)の新機能なので、他のバージョンでは計測できない。

その他

ぺんぎんさんがんばれ
問題がわかった/わからなかったら、Twitterじゃなくてこっちで教えてください。
質問もIRCかこのチケットのコメントにしてください。

vmlog_rev1.png (410 KB) vmlog_rev1.png Takuma Nakajima, 2013-02-14 17:04
memory_tracker.rb (960 Bytes) memory_tracker.rb Takuma Nakajima, 2013-02-14 17:04
followingcontrol.png (31.9 KB) followingcontrol.png Takuma Nakajima, 2013-02-15 11:57

履歴

#1 toshi_a 初音ほぼ6年前に更新

  • 説明 を更新 (diff)

#2 Takuma Nakajimaほぼ6年前に更新

全てのパターンを網羅したわけではないが,とりあえずCUIで動かしてる感じではメモリリークはなさそう.
参照ファイル:vmlog_rev1.png

mvm01.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,gtk" --debug
mvm02.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker" --debug
mvm03.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,home_timeline" --debug
mvm04.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,mentions" --debug
mvm05.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,ratelimit" --debug
mvm06.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,smartthread" --debug
mvm07.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,alsa" --debug
mvm08.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,libnotify" --debug
mvm09.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,tco" --debug
mvm10.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,gtk,aspectframe" --debug
mvm11.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,gtk,bitly" --debug
mvm12.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,gtk,followingcontrol" --debug
mvm13.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,gtk,image_file_cache" --debug
mvm14.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,gtk,openimg" --debug
mvm15.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,gtk,command" --debug
mvm16.log ruby mikutter.rb --plugin="rest,streaming,gui,memory_tracker,gtk,console" --debug

#3 Takuma Nakajimaほぼ6年前に更新

24時間くらい動作させると確認できるらしいので,今後は24時間単位で検証予定です

他の形式にエクスポート: Atom PDF