5

私は、メモリリークを探して書いた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が割り当てられたことを意味します - ペイロードが非常に小さいことを考えると、高いと思われます。このような場合は;いつこのメモリが解放されるのか、私はそれをリリースさせるために何ができるのですか?クロムデバッガを開いてこれに影響を与えるでしょうか?

+0

あまりにも多くのconsole.log()累積からクロムがクラッシュしました。これらすべての接続のヘッダーとタイミングを見ることができます。そのため、右に7kbの音が鳴ります。ツールを実行しないで一晩実行し、問題が解消されないかどうか確認してください。インスペクタではなくramを見るにはchromes task managerを使います。 – dandavis

答えて

4

私は、プライベートメモリとjavascriptメモリのタイミングを正確に知ることができませんでした。しかし、私はこれに答えることができます: "クロームデバッガにオープンな影響を与えてもらえますか?"はい。

開発者ツールを開くと、ブラウザは、作成されているすべてのXHRに関するさらに多くの情報を収集/保持/表示します。このデータは、デベロッパーツールを閉じたときに収集/保持されません(ほとんどの場合、開発ツールを遅く開いたときに厄介なことがあり、あなたが気にしていた要求を逃してしまいます)。

devツールを開いてGCをトリガし、開発ツールを閉じて、メトリックを取得するときにGCをトリガするために再度開くことができます。また、このsucker chrome:// memory-redirect /を使用して、開発ツールを開くことなく、成長を追跡することができます。

+0

devツールを使ってガベージコレクションをどのように起動させますか? – Luke

+1

@ルーク - 「タイムラインでは、ごみ箱(ゴミ)ボタン()をクリックしてGCを強制するのが非常に便利です。 - https://developer.chrome.com/devtools/docs/javascript-memory-profiling –

関連する問題