Web アプリケーションでメモリ リークの問題に直面しているように見えるクライアントの問題の配列をデバッグしようとしています。Web アプリケーションを繰り返しナビゲートするだけのマクロ スクリプトを記録した後、すべての主要なブラウザが時間の経過とともにますます多くのメモリを消費し、Flash や JavaScript などで多くのメモリ不足の問題が発生することがわかりました。Internet Explorer は、メモリを必要とする最大の原因でした。 25 分以内に約 1.5 GB をコミットします。私たちの Web アプリはフラッシュを多用していますが、これは私の調査によると、大きなメモリ リークの原因でもあります。以上のことをすべて言いましたが、私の質問は、メモリ管理を主に担当するのは何ですか? ブラウザーがプロセス レベルでのメモリの解放と使用を担当していることは知っていますが、継続的な使用でメモリ リークが発生している場合、問題に対処するために何に注目すべきでしょうか?
1 に答える
明確にする必要があることがいくつかあります。問題が Flash に関連していると思われる場合、Flash アプレットを含むページ全体を再読み込みしますか、それとも継続的に使用しますか?
再読み込みすると、問題は JavaScript 側にある可能性があります。JavaScript による Flash オブジェクトへの参照が、1 つのページを表示するセッション全体で保持されます (これはまれですが、不可能ではありません。ある時点で、Skype はオーバーレイでこのような問題を引き起こすことが知られていました)。 ExternalInterface ラッパーで何かを台無しにして、それ自体だけでなく、Flash を含むすべてのページをブラウザーのメモリに永久に残す原因となった呼び出し可能な電話番号の場合)。
Flash アプレットをリロードしない場合は、それ自身のメモリを管理する必要があり、ブラウザもプラグイン ラッパーも、プレーヤーでさえ責任を負いません。ただし、Flash は Java メモリ管理モデルに似たものを使用します。つまり、アプリケーションのシャットダウン後に再利用されないメモリを技術的に割り当てることはできません。つまり、Flash アプレットがリロードされていることを確認すると、アプレット自体がアンロードされた後、使用されたすべてのメモリを再利用する必要があります。
一般に、AS3 はより高度なプログラミングを使用しており、JavaScript に比べてより多くのプログラミングが行われているため、そこで問題を探し始めます (より複雑なコードでは間違いを犯す可能性が高いため)。フラッシュには、使用可能なメモリ プロファイラーがいくつかあります。Flash Builder にも 1 つあり、 FlashDevelopにも 1 つあり、どの IDE にもバインドされていないことが知られているものも あります。 Monocle (以前は Telemetry でした) として知られるプロジェクトで、まだリリースされたかどうかはわかりませんが、前回の MAX イベントでAdobeによってデモが行われました。 .com/_a200985228/p4khwz03sz9/?launcher=false&fcsContent=true&pbMode=normal(プレゼンテーションの真ん中に向かって)。
JavaScript に関しては、私がしばらく前に見つけたものがあります: https://wiki.mozilla.org/Performance%3aLeak_Tools Mozilla からの推奨事項。ただし、メモリ プロファイリングを有効にするために、ソースから Mozilla ブラウザをビルドする必要があったことも覚えています (その場合、プロファイラ出力に関連する変数を設定する必要があります)。Chrome に関する同様の情報は次のとおりです: http://zetafleet.com/blog/google-chromes-heap-profiler-and-memory-timeline。おそらく、Visual Studio には IE で JavaScript をプロファイリングするためのツールがいくつかありますが、それは私にはわかりません。