私は、メモリリークを探して書いたjavascriptライブラリをプロファイリングする過程にあります。ライブラリはバックエンドにAPIとサービスを提供します。それはどんなhtmlやdom操作もしません。リソース(イメージなど)は読み込まれません。これは、1回の長いポーリングを含むxhrリクエスト(jqueryを使用)を行い、イベント(Backboneイベントバスを使用)を介してUIとの間でデータの受け渡しを行います。クロムプライベートメモリの原因不明の成長
私はこのライブラリを16時間、一晩実行してテストしました。ロードするページは、ライブラリをロードするだけで、サービスを開始するためのログイン要求を送信します。テスト中にhtml、css、または他のDOMの変更はありませんでした。
ライブラリがハートビート(xhr要求)を15秒ごとにサーバーに送信し、30秒ごとに長いポーリングでハートビートを受信したことが、テストの間に発生したすべてです。
私が開いて、タイムラインからのGCを強制するために、クロムデバッガがオープンしてクロムタスクマネージャでテストを実行しました。これらは、クロム、タスクマネージャからの統計だった - 私は、最初のGCを強制した後、テストの開始時に
、: - 11.7メガバイトJavascriptのメモリ - メモリライブ6.9メガバイト/ 2.6メガバイト
共有メモリ - 21.4メガバイト
19メガバイトの専用メモリ私はGCを強制的に16時間後 - これらは、新たな統計ました: - 53.8メガバイト
メモリーJavascriptのメモリ - 6.9メガバイト/ 2.8メガバイトライブ
共有メモリ - 21.7メガバイト
60.9メガバイト専用メモリあなたはJSヒープのみが20万増見ることができるように。
プライベートメモリが42メガバイト増加しました!
誰が私的なメモリの増加を引き起こしたのかを説明できる人はいますか?クロームデバッガを開いているのは原因か、メモリの増加に影響しますか?ので、他のメモリが再利用されていなかった - 私が持っていた
もう一つの思考がJSヒープからタイムラインデバッガからのみ再生されたメモリをGCを強制することです。したがって、最終的には収集される可能性があるため、これは「漏れ」ではないかもしれませんが、これを確認する方法がわかりません。特に、この記憶が何を表しているか知らない。
最後に、xhrの結果も私的なメモリに保存されていることを読んだ。これが本当なら誰でも知っていますか?もしそうなら、アプリケーションはこの期間に約5700 xhrの要求を実行しました。 42Mbの大部分がこれに起因するとすれば、それは約7kが割り当てられたことを意味します - ペイロードが非常に小さいことを考えると、高いと思われます。このような場合は;いつこのメモリが解放されるのか、私はそれをリリースさせるために何ができるのですか?クロムデバッガを開いてこれに影響を与えるでしょうか?
あまりにも多くのconsole.log()累積からクロムがクラッシュしました。これらすべての接続のヘッダーとタイミングを見ることができます。そのため、右に7kbの音が鳴ります。ツールを実行しないで一晩実行し、問題が解消されないかどうか確認してください。インスペクタではなくramを見るにはchromes task managerを使います。 – dandavis