プロジェクト

全般

プロフィール

最適化 #930

完了

バグ #925: mikutterがメモリを大量に消費することがある

Message::MessageUserの代わりに新しくUserを作る

Osamu Koga さんが約8年前に追加. ほぼ8年前に更新.

ステータス:
終了
優先度:
通常
担当者:
対象バージョン:
開始日:
2016-11-14
期日:
進捗率:

0%

プラグイン名:

説明

#925 の文字列リークは、各ツイートについて1つ作られるMessage::MessageUserが原因ではないかと思われます。このオブジェクトはUserオブジェクトの他に、TweetにくっついてきたUser情報の生JSON(をparseしたもの)を保持しており、実質Userオブジェクトが2倍以上あるような状況になっています。

>>> GC.start; ObjectSpace.each_object(Message::MessageUser).count
5216
>>> GC.start; ObjectSpace.each_object(User).count - ObjectSpace.each_object(Message::MessageUser).count
4063

元々このクラスは、ユーザがアイコンを変更したりしても過去のアイコンを保持できるようにするためのものでしたが、Retriever::Modelの分離度が上がったので、ユーザの見た目が変わるような変更があったときには新しいUserを生成してやることで、古いツイートは古いUserを保持しながら、新しいUserfindbyidnameで拾えるようにできます。
Stringが大量にダブる問題は、これである程度解決できるはず。


ファイル

mikutter-memory-plot.png (5.84 KB) mikutter-memory-plot.png Osamu Koga, 2016-11-18 10:25
mikutter-memory.png (123 KB) mikutter-memory.png Osamu Koga, 2016-11-18 10:42
mikutter-memory-plot-final.png (6.76 KB) mikutter-memory-plot-final.png Osamu Koga, 2016-11-18 22:51
mikutter-memory.png (125 KB) mikutter-memory.png Osamu Koga, 2016-11-18 22:55

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