https://dev.mikutter.hachune.net/
https://dev.mikutter.hachune.net/favicon.ico?1619448608
2017-03-05T07:50:39Z
やること
mikutter - 最適化 #991: Retriever.#Modelを呼び出すと毎回ObjectSpace.each_objectを内部で呼び出していて、処理がかなり遅い
https://dev.mikutter.hachune.net/issues/991?journal_id=2351
2017-03-05T07:50:39Z
toshi_a 初音
toshi.alternative@gmail.com
<ul><li><strong>担当者</strong> を <i>toshi_a 初音</i> から <i>Izumi Tsutsui</i> に変更</li></ul><p>topic/991-too-many-inspection-objectspace というブランチで修正したので、そっちの環境で試してもらっていいですか</p>
mikutter - 最適化 #991: Retriever.#Modelを呼び出すと毎回ObjectSpace.each_objectを内部で呼び出していて、処理がかなり遅い
https://dev.mikutter.hachune.net/issues/991?journal_id=2352
2017-03-05T09:06:24Z
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp
<ul></ul><a name="発生状況"></a>
<h3 >発生状況<a href="#発生状況" class="wiki-anchor">¶</a></h3>
<p>定性的な話ばかりですが状況拾っておきます</p>
<ul>
<li>もともとは 3.5 になってからという気もするけれどあまり定かでない</li>
<li>常に遅いのではなくて、何かが裏で走っているような感じで遅くなる</li>
<li>確証はないけれど、以下のいずれかで重くなる?
<ul>
<li>リストの定期更新がかかって、リストのストリームでは取得されないリストメンバーのRTを一気に受信した時</li>
<li>最近 Mentions として通知されるようになったけれども UserStream に載らないコメント付きRTが複数発生したものを rest で取得した時</li>
</ul>
</li>
<li>発生すると以下の操作がいずれも重くなる
<ul>
<li>ツイート入力(日本語変換含む)</li>
<li>TLのホイールスクロール</li>
<li>URIをポイントした時のマウスカーソル変化</li>
<li>画像を開く</li>
</ul>
</li>
<li>プチフリ中に操作しても反応しないが、操作自体は裏でたまっているようで、プチフリから開放されるとたまっていた操作が一気に実行される(スクロール・ツイート入力・ブラウザを開く 等々)</li>
</ul>
<hr />
今回のとしぁさん駆動の発端ツイートはこれ
<ul>
<li><a class="external" href="https://twitter.com/tsutsuii/status/837598189570043904">https://twitter.com/tsutsuii/status/837598189570043904</a></li>
</ul>
<blockquote>
<p>mikutterのメモリ消費問題は解決したけれど、 rest やリストの定期更新がかかって一斉に複数アイコンロードが発生した時にプチフリというか秒単位でフリーズする現象が起きている気がする(感覚的定性的な役に立たないレポート)<br />18:39 - 2017年3月3日</p>
</blockquote>
<ul>
<li>その続き<br /><a class="external" href="https://twitter.com/tsutsuii/status/837598770564997122">https://twitter.com/tsutsuii/status/837598770564997122</a></li>
</ul>
<blockquote>
<p><a class="user active" href="https://dev.mikutter.hachune.net/users/3">toshi_a 初音</a> リストのストリームはRTを送ってこないので、リストの定期更新時間が来ると一斉にRTされた分のアイコンがロードされるっぽいのですが、そこで むぎゅぎゅ となってる印象(マウスのホイールの調子も悪いのでどっちが原因で動かないのか一瞬わからなくなる)<br />18:41 - 2017年3月3日</p>
</blockquote>
<hr />
Atom なネットブックに入れ直した室長さんもこんなレポート
<ul>
<li><a class="external" href="https://twitter.com/brsywe/status/838060776132730884">https://twitter.com/brsywe/status/838060776132730884</a></li>
</ul>
<blockquote>
<p>キャッシュを消したからだろうけれどアイコンの読み込みがほとんどできない<br />1:17 - 2017年3月5日</p>
</blockquote>
<ul>
<li><a class="external" href="https://twitter.com/brsywe/status/838061036502573056">https://twitter.com/brsywe/status/838061036502573056</a></li>
</ul>
<blockquote>
<p><a class="user active" href="https://dev.mikutter.hachune.net/users/3">toshi_a 初音</a> ちょいちょい読み込んでいっているのでしばらくしたら治るね<br />1:18 - 2017年3月5日</p>
</blockquote>
<ul>
<li><a class="external" href="https://twitter.com/toshi_a/status/838061226810695680">https://twitter.com/toshi_a/status/838061226810695680</a></li>
</ul>
<blockquote>
<p>@brsywe 3.5で無駄に何回も読み込みに行くバグが直ったので回線には優しくなったんだが、同時にCPUに負荷がかかるようになった可能性があるとつついさんから指摘があったな、それかも<br />1:19 - 2017年3月5日</p>
</blockquote>
<ul>
<li><a class="external" href="https://twitter.com/brsywe/status/838072737612472321">https://twitter.com/brsywe/status/838072737612472321</a></li>
</ul>
<blockquote>
<p>まっさらな状態のUbuntuにmikutter入れた直後、アイコンを取りに行くのにCPUか回線を使いすぎていて新たな画像が開けない状態になる<br />2:04 - 2017年3月5日</p>
</blockquote>
<hr />
としぁさんの分析
<ul>
<li><a class="external" href="https://twitter.com/toshi_a/status/838306258906050560">https://twitter.com/toshi_a/status/838306258906050560</a></li>
</ul>
<blockquote>
<p>@tsutsuii 今回修正したメソッドは最悪の場合ヒープを全て走査してしまうので、スワップしていると酷いことになりそう<br />17:32 - 2017年3月5日</p>
</blockquote>
<ul>
<li><a class="external" href="https://twitter.com/tsutsuii/status/838306480906366976">https://twitter.com/tsutsuii/status/838306480906366976</a></li>
</ul>
<blockquote>
<p><a class="user active" href="https://dev.mikutter.hachune.net/users/3">toshi_a 初音</a> あー、スワップはそれなりに使われていて、日本語変換も詰まるところからするとそれっぽい気はしますね……<br />17:33 - 2017年3月5日</p>
</blockquote>
<hr />
<p>うちにも Atom N455 のネットブックあるので、それで試すのが良さそうですね……。</p>
mikutter - 最適化 #991: Retriever.#Modelを呼び出すと毎回ObjectSpace.each_objectを内部で呼び出していて、処理がかなり遅い
https://dev.mikutter.hachune.net/issues/991?journal_id=2353
2017-03-05T09:35:52Z
toshi_a 初音
toshi.alternative@gmail.com
<ul></ul><p>まとめありがとうございます。</p>
<p>プロファイラでも3.5.3ではかなり時間がかかっているeach_objectの呼び出しが400回前後あるのが3回まで減っており、ボトルネックが解消されていました。私の環境では特に体感できませんでしたが、スワップしているなどメモリ領域へのアクセスが極端に遅いケースでは体感できる程度に違いが出る可能性はあります。</p>
<p>もしあまり効果がなかったとしても、悪くなってそうということがなければこのままmergeしてしまうと思いますが、しばらく検証してもらっていいですか。</p>
mikutter - 最適化 #991: Retriever.#Modelを呼び出すと毎回ObjectSpace.each_objectを内部で呼び出していて、処理がかなり遅い
https://dev.mikutter.hachune.net/issues/991?journal_id=2354
2017-03-05T10:08:37Z
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp
<ul></ul><p>ネットブックで起動してみたのですが、うちのは 2GB載っているのと NetBSD で軽めな環境なせいか<br />起動直後はほとんどスワップ使っていなくて比較ができそうなほど差がはっきりしないという感じでした。<br />リストのキャッシュを消した状態で2つのリストの初回取得時にどれくらい止まるか、を見ればわかるかも?</p>
<p>ある程度の時間TLを流して、キャッシュされているが古いデータがほとんど参照されない状態になって、<br />それらがまとめてスワップに放り込まれている状態になってから全参照(リストの定期取得とか)が発生、<br />というシナリオだとすると、まる一日くらいは流さないと体感できないかもしれません。</p>
mikutter - 最適化 #991: Retriever.#Modelを呼び出すと毎回ObjectSpace.each_objectを内部で呼び出していて、処理がかなり遅い
https://dev.mikutter.hachune.net/issues/991?journal_id=2355
2017-03-05T11:11:06Z
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp
<ul></ul><p>重くなった要因の1つとして<br />mikutter_slack プラグインを入れていた<br />という要素もあるかもしれないのであわせて見てみます</p>
mikutter - 最適化 #991: Retriever.#Modelを呼び出すと毎回ObjectSpace.each_objectを内部で呼び出していて、処理がかなり遅い
https://dev.mikutter.hachune.net/issues/991?journal_id=2357
2017-03-06T13:14:17Z
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp
<ul></ul><p>とりあえずまる一日過ぎた段階ではプチフリは起きていないような感じです。<br />以前と比べてメモリ使用量も減っているような気がしますが、気のせいかも……<br />(相変わらず数字がないレポート)</p>
mikutter - 最適化 #991: Retriever.#Modelを呼び出すと毎回ObjectSpace.each_objectを内部で呼び出していて、処理がかなり遅い
https://dev.mikutter.hachune.net/issues/991?journal_id=2369
2017-03-10T17:49:27Z
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp
<ul><li><strong>ステータス</strong> を <i>実装待ち</i> から <i>解決</i> に変更</li></ul>起動して5日経過して ruby のメモリ使用量 1.3GB くらいの時点ですが
<ul>
<li>以前のように数秒止まる、という現象は発生していない</li>
<li>リストの定期間隔取得でちょっと重くなる現象は観測されているがコンマ1,2秒というくらいで復帰する</li>
</ul>
<p>という定性的感覚的な判定では問題なくなっていると言って良いと思います。</p>
mikutter - 最適化 #991: Retriever.#Modelを呼び出すと毎回ObjectSpace.each_objectを内部で呼び出していて、処理がかなり遅い
https://dev.mikutter.hachune.net/issues/991?journal_id=2370
2017-03-11T23:40:14Z
toshi_a 初音
toshi.alternative@gmail.com
<ul><li><strong>ステータス</strong> を <i>解決</i> から <i>終了</i> に変更</li></ul>