ゾンビを殺し、キツネを助けて



Firefoxブラウザーは、永続的なリークの問題のために、積極的なメモリー使用者であるという定評があります。 Kyle Hueyの新しいパッチを使用すると、この問題を大幅に解決できます。 しかし、最初から始めましょう。



Firefoxでは、JavaScriptを使用して割り当てられたメモリはコンパートメントに分割されます。 大まかに言えば、1つのソース(たとえば、1つのサイト)のJavaScriptが使用するすべてのメモリは、1つのセルに割り当てられます。 FirefoxがJavaScriptによって直接使用するメモリも1つ以上のセルを占有します。 この手法を使用すると、メモリのセキュリティと局所性が向上します。



Firefox 13以降、使用済みのメモリセルは「about:コンパートメント」ページで確認できます。 ここでは、たとえば、ハーバーのメインページが開いている場合にどのメモリセルが関係するかを示します。







ページを閉じると、それに関連付けられているすべてのセルが消えます。 まあ、すぐにではないかもしれませんが、ガベージコレクターとサイクルコレクターが機能する場合。 アドオンまたはFirefox自体のバグが原因で、セルが削除されず、ゾンビコンパートメントとしてメモリに残る場合があります。 これにより、ブラウザが消費するメモリ量が増加し、プログラムがクラッシュする可能性が高くなります。 悲しいです



しかし、ほとんどの状況でゾンビ細胞の出現を排除するパッチを書いた勇敢で親切なカイル・ヒューイは、すでにキツネの助けに急いでいます(このパッチはFirefoxのナイトリービルドですでに利用可能です)。 このパッチを使用すると、メモリ消費が数倍削減されます(使用したリークのある特定のプラグインの数によって異なります)。 これにより、最終的に、Firefoxの最新バージョンを、より強力でないマシン(メモリが半分ギガバイトのデバイスなど)で使用できるようになります。 しかし、たとえあなたの生活が良好で、16GBのRAMがあったとしても、このパッチは、ガベージコレクターと循環リンクコレクターの起動頻度を減らすため、フォックスを高速化します。 そして、これら2つは排他モードで動作し、プログラム全体が終了するまでフリーズします。



しかし、すべてがそれほどバラ色ではありません。 Kyleのパッチは、アドオンの多くのリークを修正しました 、アドオンSDKでリークを開きました。 バージョン1.6.1では、これはすでに修正されていますが、お気に入りのアドオンが以前のバージョンのSDKを使用して作成された場合、Facebookおよび「+1」ボタンを削除するためのアドオンであるWallflowerのような大きなリークが発生しないように、開発者に手紙を書く理由があります。



ご覧のとおり、残りのゾンビセルの狩りは本格的で、参加することができます。 これを行うには:

-キツネ(多かれ少なかれ最新版)で、メモリに関するページを開きます。

-疑わしいスクリプトとプラグインでテスト済みのページを開き、使用しているメモリ量を確認します。 たとえば、Habrのメインページの場合:



│├───3,579,160B(05.06%)-コンパートメント(http://habrahabr.ru/)

││├──1,642,496B(02.32%)-gc-heap

│││├────514,680B(00.73%)-形状

││││├──239,560B(00.34%)──ツリー

││││├──230,880B(00.33%)──dict

││││└───44,240B(00.06%)──ベース

│││├────489,120B(00.69%)-アリーナ

││││├──460.712B(00.65%)──未使用

││││├───15,576B(00.02%)──パディング

││││└───12.832B(00.02%)──ヘッダー

│││├────369.104B(00.52%)-オブジェクト

││││├──210.656B(00.30%)──関数

││││└──158.448B(00.22%)──非機能

│││├────166,136B(00.23%)──スクリプト

│││├─────88,608B(00.13%)──タイプオブジェクト

│││└─────14.848B(00.02%)──文字列

││├────692,000B(00.98%)-型推論

│││├──329,216B(00.47%)──script-main

│││├──295,520B(00.42%)──object-main

│││└───67,264B(00.10%)──テーブル

││├────456.328B(00.64%)──スクリプトデータ

││├────327,680B(00.46%)-mjit

│││└──327,680B(00.46%)──コード

││├────260,224B(00.37%)-追加の形状

│││├──104.992B(00.15%)──ツリーテーブル

│││├───97,024B(00.14%)──dict-tables

│││├───31,328B(00.04%)──tree-shape-kids

│││└───26,880B(00.04%)──コンパートメントテーブル

││├────103,440B(00.15%)-オブジェクト

│││├──100,224B(00.14%)──スロット

│││├────3.008B(00.00%)──要素

│││└──────208B(00.00%)──その他

││├─────90.016B(00.13%)──分析-一時的

││└──────6.976B(00.01%)──string-chars



-疑わしいページを閉じて、下の[メモリ使用量を最小限に抑える]ボタンをクリックします(信頼性のために数回)。 これにより、ガベージコレクタと循環参照コレクタが起動し、対応するセルが消えます。 これが起こらない場合、おそらく彼女はゾンビです。

-10〜20分で確認します。一部のゾンビはしばらくの間生き続け、一部は不滅です。

-私たちは、どのスクリプトまたはアドオンがゾンビの出現の原因であるかを見つけようとしています。

-説明に「[MemShrink]」を追加することを忘れずに、 bugzillaにバグを投稿し、「memory?Verbose」に関する出力を添付しましょう。



良いゾンビ狩りをして、あなたの脳の世話をしてください!



All Articles