Firefox: 特定の SVG ファイルを表示するとシステムが応答しなくなる

Firefox: 特定の SVG ファイルを表示するとシステムが応答しなくなる

重要:

現在、SuperUser の常連数名がこの問題の範囲と原因を絞り込もうとしています。現在、ボランティアを募集していますフォームに記入するここ次のテストを実行した後:

  1. 最新バージョンの Firefox (たとえば、24.x または 25.x。ベータ版も興味深い) をインストールまたは起動します。

  2. お使いのプラットフォームのWindowsタスクマネージャーに相当するものを使用して、メモリとCPUの使用状況を監視します。適切なタスクマネージャーを開いてください。前に下のリンクを開いてください。

  3. Firefox ブラウザがクラッシュする可能性があるため、未完了の作業は Firefox ブラウザに保存してください。情報の損失については一切責任を負いません。

  4. 新しいタブで次のリンクを開きます。http://openclipart.org/people/GR8DAN/showbizframe.svg

  5. 画像を読み込む前と後のFirefoxプロセスのCPUとメモリ使用量の変化を観察します。Firefoxのメモリ使用量の差が前後上記のタブを開くことは非常に重要です(1 GB以上)。またはFirefoxがフリーズしたりクラッシュしたりした場合、またはCPU使用率が継続的に高い場合は、あなたのシステムにはバグがありますそれ以外の場合は、バグはありません。いずれの場合も、それに応じてフォームに記入してください。

我々は症状と原因を絞り込み、バグを修正しようとしています。Mozilla バグトラッカーMozilla の開発者が問題を解決できるようにするためです。これは、潜在的に広範囲にわたる、優先度の高い問題であるため、特にこれを行っています。画像の埋め込みを許可している Web サイトは、悪意を持って使用され始めると、ページを訪問するユーザーの大部分に対してサービス拒否攻撃を受ける可能性があります。

2013 年 11 月 29 日更新: バグは次のように特定されました。

  • これはプラットフォームに依存しません。このバグは Linux、Mac、Windows で再現されています。

  • この問題は、AMD、Intel、Nvidia のグラフィック カードで再現されました。

  • これは Firefox とその派生版でのみ発生します。Chrome、IE、Opera は影響を受けません。

  • この問題は、Firefox 25.0.1、Firefox 26 Beta、Firefox 27 Alpha、および 2013 年 11 月 28 日時点のトランクの Nightly ビルドで発生しています。

  • すべてのユーザーが Firefox のクラッシュやシステム全体のメモリ不足 (OOM) 状況を経験しているわけではありません。この動作は、RAM が 4 GB 以下の GNU/Linux システムに限定されているようです。

  • Firefox 27 Alpha および Nightly では、Firefox 25 および 26 Beta と動作が若干異なります。新しい 2 つのバージョンでは、画像の読み込みを長時間 (ほとんどのシステムで 10 ~ 20 秒) 続けると、CPU とメモリの高消費は最終的に落ち着きます。いったん「落ち着く」と、メモリと CPU の状態は正常に戻ります。しかし、古い 2 つのリリースでは、問題の画像がレンダリングされているタブに切り替えるか、Firefox を完全に終了するかタブを閉じるまで、CPU とメモリの状態は持続します。

  • 最新のグラフィックドライバを搭載したほぼすべてのシステムで再現可能です。問題が発生しないシステムは1つだけです。どれでも症状はまったくなく、非常に古いグラフィック ドライバー (約 3 年前のもの) を使用しています。これは、特定のハードウェアの問題ではなく、使用された非常に古いドライバーにバグがあり、奇妙なことに、それが不具合のある動作の発生を防いでいることを示しています。

元の質問:

私はFedora 19(カーネル3.11.9-200.fc19.x86_64)でFirefox firefox-25.0-3.fc19.x86_64を使用しています。このリンクFirefox を使用すると、システムが応答しなくなります。2htop台目のモニターで実行すると、メモリ使用量が急増し、3954 MB の RAM がすぐに使い果たされ、スワップが徐々にいっぱいになり、プロセッサの 1 つの使用率が 100% まで上昇し、システムが応答しなくなり、マウスが遅くなり、htop更新に数十秒かかるなどします。FF プロセスを強制終了すると、すべてが正常に戻ります。

プラグインを無効にして FF をセーフ モードで再起動しても、動作は同じです。同僚のマシンを試してみましたが、RAM は約 8000 MB あり、同じことが起こります (メモリ使用量が高く、1 つのプロセッサが 100% に達します)。使用量が約 4096 MB に達すると、Firefox を終了するように求めるダイアログが表示されます (Firefox は 4096 MB のみを使用するようにハードコードされているのでしょうか?)。

プラグイン (quickjava) を使用して JavaScript を無効にすると、問題なくリンクを開くことができます。ただし、同僚のマシンではこれが機能しません。他のサイトを試して JS が無効になっていることを確認しましたが、問題は解決しません。

何が原因なのでしょうか?

アップデート: 問題は、このSVG

答え1

  1. これは JavaScript の問題ではなく、投稿したリンクによってレンダリングされる複雑な Scalable Vector Graphics (SVG) ファイルが多数あることが原因です。
  2. Fedora のハードウェア アクセラレーション グラフィック スタックはバグが多いことで有名です。そのため、Firefox のグラフィック スタックの使用によって、グラフィック スタック (Mesa、Xorg DDX、またはカーネル) にバグが発生する可能性が十分にあります。
  3. SVGが実際にレンダリングされている可能性もある。ソフトウェアソフトウェア レンダラーにはまだバグがあります。

分割して征服しましょう:

ハードウェアアクセラレーションを無効にする

FF で、「編集」->「設定」に移動し、「詳細設定」をクリックして、「全般」タブの「ブラウジング」セクションで、「ハードウェア アクセラレーションが使用可能な場合は使用する」のチェックを外します。

もう一度同じサイトにアクセスしてみてください。しないCPU/メモリの過負荷が発生する場合、問題は 2D Canvas GPU アクセラレーション (Firefox の使用またはバックエンド グラフィック スタック) または SVG レンダラーのいずれかにあることがわかります。

もし、あんたがするハードウェア アクセラレーションを無効にして、同じ CPU/メモリ オーバーロードが発生する場合は、SVG パーサーのバグである可能性があります。これは、おそらく純粋なソフトウェアで発生します。ただし、その場合、Windows でも同じ問題が発生する可能性がありますが、私たちはそうではありません (Windows 上の FF 24.1.0 でテストしましたが、速度は遅いものの、お客様のように CPU と RAM をすべて消費することはありませんでした)。

Mesa で何らかのメモリ リークが発生していると思われます。

試してみるべきいくつかのこと

  1. Firefox で に移動しabout:support、「テキストをクリップボードにコピー」をクリックして、ここに投稿します (pastebin など)。これにより、問題領域に精通している私たちが、ハードウェアとグラフィック スタックの状況を判断するのに役立ちます。
  2. Firefoxで「詳細」チェックボックスをオンにしてabout:memory、「測定」をクリックします。これができれば素晴らしいでしょうすぐ後問題のあるページに移動します -- その時点で FF に何かを実行させることができれば。
  3. 次のようにターミナルから Firefox を実行します。LIBGL_DEBUG=verbose firefox -safe-mode. OOM するサイトに直接移動します。 数秒間実行させて (明らかに問題が発生するには十分ですが、システムに負担をかけないようにしてください)、その後終了します。 の出力を の出力とともにここに投稿しますdmesg

これらの手順により、問題がどこにあるのかを正確に把握するためのデバッグ情報がさらに得られますが、これらの手順のほとんどは、問題がグラフィック スタックにあるという前提に基づいています。そうでない場合、これらのほとんどは役に立ちません。

アップデート:私は生のgithubリンクこれには JavaScript やおかしな点は一切なく、単に SVG を羅列しただけです。動作に不具合がある場合はクラッシュするはずですし、問題の原因となる可能性のある他のすべての原因も排除されます。

アップデート2:OPは問題を次のように切り分けましたこの特定の画像

関連情報