2017-03-31 33 views
3

Hacker News demo app structureに基づくサーバー側のレンダリングを使用して、本番環境で稼動するVue.js(v2.2.6)アプリがあります。プロセスがメモリ不足になり、約6〜12時間後にクラッシュするメモリリークがあり、サーバーでヒープスナップショットを取って問題を追跡し始めました。Vue.jsサーバー側のレンダリングでのメモリリークの追跡?

しかし、私たちはこれを何日間も掘り下げてきましたが、実際にはどこにもいませんでした。下のスクリーンショットに示すように、VueComponentVue$2のインスタンスが多数作成され、メモリから削除されないことがあります。 Vueのサーバーサイドレンダリングの内部については、これが実際のリードであるかどうか、そしてそれが実際のリードであるかどうかを知るための十分な知識はありません。

enter image description here enter image description here

誰もがこのような何かに実行するか、我々はこれを引き起こしている可能性がありますか決定するために見えるかもしれない任意のアイデアを持っていますか?

+0

おそらくhttps://github.com/vuejs/vue/issues/5089? –

+0

私はそれを見ましたが、グローバルミックスインはありません。 –

答えて

2

最後に、ヒープスナップショットだけを使用するよりも強力なデバッグツールに切り替えることで、LLDBとllnodeプラグインを追跡しました。これは、JoyentのSmartOSとmdbを使用している場合には非常によく知られているはずです。標準のヒープスナップショットよりも多くのデータをドリルインすることができます。

ノードモジュールをdumpmeノードモジュールを使用して本番アプリケーション内でコアダンプをトリガーしました(他の方法もありますが、これが最も簡単でした)。

その後、https://developer.ibm.com/node/2016/09/27/advances-in-core-dump-debugging-for-node-js/にある指示に従って、メモリに保持されていたVueComponentsへの参照のトレースを開始しました。この場合

> lldb node -c core 
(lldb) plugin load ./node_modules/llnode/llnode.so 
(lldb) v8 findjsobjects 
(lldb) v8 findjsinstances VueComponent 
(lldb) v8 inspect ... 

、それは部品が破壊された時にクリアされませんでしたばかり再帰のsetTimeoutがあったことが判明し、そのアプリケーション全体への参照は、メモリ内にとどまりました。

関連する問題