Firefoxのメモリ大量消費は『仕様』、だが回避方法あり (original) (raw)
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
- そのうち出るだろうから先に指摘しておきます。
MemoryLeakとメモリーの使いすぎは違います。
MemoryLeakとは使用したメモリーを解放しわすれることで、
後で開放する気があるなら(そしてそれができるなら)
MemoryLeakではありません。 今回のキャッシュは基本的には、
ちゃんと開放されるのでリークではありません。
# しかし実際、FirefoxはいくつかMemoryLeakするみたいですし、
# 許可なく大量のメモリーを使っているのも事実ですし...うーん- 実際問題として今回の話は、1.5 で導入された「進む・戻るボタンでの高速なナビゲーション」のためのメモリ使用なんですよね。とは言え現実には、あまりにメモリを使いすぎてページアウトしていたら高速もなにもないわけで。
先の blog などでは、例えば RAM が 1GB の場合で cache ページ数が 8 となっています。平均的な 1 ページ当たりのメモリ消費量が 4MB となっていますから、例えばタブを 15個開いていて、それらが全て 8ページ分の履歴を持つと考えるとそれだけで 15x8x4MB = 480MB。
履歴を持たない(開いたばかりの)タブがあることなどを考えて平均 4ページ程度としても 240MB のメモリをこの機能のために使うことになるでしょうか(考え方が間違っていたら御指摘ください)。
個人的にはやはり使いすぎな気がしますし、高速に戻るナビゲーションなんて 1つ手前まであれば十分な気がします。
* > タブを 15個開いていて、それらが全て 8ページ分の履歴を持つと考えると
8とかいうのは、キャッシュされるページのセッション全体での最大数だそうです。なおかつこの最大数はメモリ搭載量に依存し、Boris Zbarskyはコメントで「大半のユーザーはたいていの場合3ページとか5ページとかになる」と言っています。
> Edit: In the comments, Boris and David pointed out that I misread the code, and that this is a global preference so that there are no more than 8 cached pages for the entire session, not per tab. My initial posting had claimed that it was per-tab. Oops!
> 編集:コメントにて、私がコードを読み違えているとBorisとDavidが指摘してくれた。これはグローバルの設定であるから、キャッシュされるページが8を超えないというのはセッション全体についてであり、タブ毎ではない、とのこと。私の最初の投稿では、タブ毎だと言っていた。やっちゃったよ!
> Ben Goodgerのブログエントリ最下段(両名の指摘 [mozillazine.org])
* >個人的にはやはり使いすぎな気がしますし、高速に戻るナビゲーションなんて 1つ手前まであれば十分な気がします。
ディスクキャッシュだけで十分高速だし、
直近のものならOSのディスクキャッシュにも乗ってるからさらに高速。
屋上屋なFirefoxのオンメモリキャッシュは費用対効果が非常に悪い。
タブブラウザはたどる可能性のあるリンクを片っ端から
新タブで開いて先読みさせておくというスタイルで使っている限り
高速に戻る必要性がそもそもなかったり。
それにメインメモリが十分あまっていたらそれを全部使っていいかというとそうでもない。
OSのディスクキャッシュが消えるし他のプロセスもディスクにスワップアウトしがち。
Firefox開発者が自分の製品の評価を上げる為だけにこんな
メモリの浪費をしているとしたら批判されてしかるべきだ。
- 実際問題として今回の話は、1.5 で導入された「進む・戻るボタンでの高速なナビゲーション」のためのメモリ使用なんですよね。とは言え現実には、あまりにメモリを使いすぎてページアウトしていたら高速もなにもないわけで。
限度 (スコア:3, すばらしい洞察)
by Anonymous Cowardon 2006年02月15日 17時16分 (#884050)
>「それは仕様だ」という記事がでていることを 本家記事が伝えている。
>前後のcasheを保持しておいた方がWeb巡回の際の利便性がよいという立場からの設計だそうだ。
限度があるよね。
- 多分、限度が人によって環境によって変わるのが悩みの種。
- だったら、最初からアナウンスしてくれ。
最小システム構成でテストしてないっていってるようなものじゃない?
割と速い回線を使ってれば前後のキャッシュなんてどうでもいい。さらに言えばタブで新しいリンクを開くからわざわざ前のページに戻って再描画させるようなこともしない。
そのためのタブブラウザだと思ってたのに。。。
- だったら、最初からアナウンスしてくれ。
- ネスケやIEでは元のファイル一つ一つをそのままキャッシュとして保存してくれていたので
キャッシュフォルダからファイルを拾えたのに
Firefoxではキャッシュがそのまま画像やテキストファイルということがないので不便になって困ります。
0.96から使い続けていますが、セキュリティよりもバージョンアップ縛りを優先させた問題や
以前から言われているメモリの問題を仕様と言い逃れるなど、開発者の都合ばかり優先されて
利用者ないがしろの傾向が強まったのではないかと思えて仕方ありません。
- ネスケやIEでは元のファイル一つ一つをそのままキャッシュとして保存してくれていたので
- 最近、AJAXとかがはやっていますけど、実は、AJAXがかなりメモリを食うので、正直、このままでいいのかなぁとか思っていたのですが、Firefoxの仕様でこのような部分があると、その傾向により拍車がかかり問題がより深刻になりそうですね。
- >AJAXがかなりメモリを食うので
(別に煽りでなく)具体的なソースとか、そういうサイトありますか?これは、Ajaxは、リッチなUIのために画像を多用する傾向にあるから、という理解でいいのかな? JavaScript自体が消費するメモリは、大した物ではないはずです。IEみたいにJavaScriptによって引き起こされるメモリーリークがあるのなら別ですが、Firefoxで、この手のメモリリークは聞いたことありません。ここが参考になるかも。
IEのメモリリーク問題:http://p2b.jp/index.php?UID=1131336575/ [p2b.jp]
- >AJAXがかなりメモリを食うので
- 自分のFirefox1.5.0.1(WindowsXP home SP2)を確認してみたら初期設定値として-1が設定されてました。
このままでいい、ってことだと思うけど、なんでタレコミ人と違うんだろう?プラットフォームの違い?- たぶん browser.sessionhistory.max_entries の値と見間違えたのではないかと。
- Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.0.1)
- 昔のNetscapeにあった(ような気がする)メモリキャッシュの指定ができるようになればいいな。と思った。
- 私が使っているWindows2000上のFirefoxでも,初期値は「-1」でした。
タレコミにリンクが書いてある,browser.sessionhistory.max_total_viewersの説明を読むと,初期値は「-1」が正解のようですね。
「初期値は『50』」というのは,タレコミ人の見間違いではないでしょうか。
* 僕のところの設定では
browser.sessionhistory.max_total_viewers
が-1
browser.sessionhistory.max_entries
が50でした。
タレコミ人はbrowser.sessionhistory.max_entriesを見ているのではないでしょうか?
となるとbrowser.sessionhistory.max_entriesを0にするといいってことはあるんでしょうか?- > どっち?
と言うときはさっさとぐぐったほうが早いです。:-P
browser.sessionhistory.max_entries
-> ロケーションバーの入力履歴の最大数
browser.sessionhistory.max_total_viewers
-> キャッシュメモリのページ数
てことで、browser.sessionhistory.max_total_viewersを0に設定するのが正しいようです。
# 間違ってたらマイナスモデよろしくです。
--
... from rakehelly programmer.
- > どっち?
- 私が使っているWindows2000上のFirefoxでも,初期値は「-1」でした。
- みなさん,そんなで済んでるんですか?
タスクマネージャでみると,今現在firefox.exeの「メモリ使用量」が「396,192K」とか表示されているんですが。500Mいくことも珍しくないです。
1Gの物理メモリをつんだWindows XPでFirefox 1.5.0.1をつかってます。- リークするという話もありますが、Gecko エンジンが伝統的に画像を一旦実サイズで展開する、という困った仕様の方を先に直して欲しい。切に希望します。このせいで Firefox が 1GB メモリを全部食いまくってまともに動かなくなるのが毎日数回 orz
#画像レンダリングの処理は、穴の問題を覗けば正直 IE の方がずっと良くできていると思う。
* * Minimoはよく知らないんですが、Windowsですとk-meleon [sourceforge.net]を
使ってみることをおすすめします。
感覚的には、起動はIEよりちょっとだけ遅いくらい、
レンダリングはひょっとするとIEよりも速いくらい、
IEのプアなCSS表現力も考慮すると驚異的な速さだと言っていいと私は思います。
Geckoの(速度に関する)実力はFirefoxなどで推し量っては間違えます。
んで、でかいHTML [cocolog-nifty.com]をレンダリングさせたらどうなんだと思ってやってみたら、
IEのほうが速かったですw えとGeckoの方が速いというのは訂正します。
FirefoxはXULが足を引っ張っているのではないかと予想しています。
もっさりした操作感はこれが原因でしょう。
ちなみにK-Meleonはレンダリング以外の動作もきびきび動きます。
ただ、PocketPC版はない(と思う)のでそっちはどうだかわかりませんけど。
ちなみにメモりはいちいちOSに返却してるみたいです。
/.のこのストーリーのコメントを全部表示させた状態で24M弱、
Yahoo! JAPANのトップページを表示させた状態では24M強です。
この程度ですと大富豪とまでは呼べない気がします。
って基準はなんだ? とかいう話になっても困りますがw
とはいえ常用してるのはFirefoxなんですけどね。
以前触ってみて、あまりの軽さに衝撃をうけて乗り換えを検討したのですが、
便利な拡張機能の存在が決め手となってFirefoxに戻ってしまいました。 - 私も最近までそんな感じで油断すると500Mとか
喰いまくってました。
よく皆平気だなと思いつつ拡張機能を削ぎ落としていったら、
増えても200Mくらいまで減りました。
誰かリークしてたなと。
1GのメモリのXPで1.5.0.1
* だから沢山メモリを使ったら即メモリリークと判断するのは……
- リークするという話もありますが、Gecko エンジンが伝統的に画像を一旦実サイズで展開する、という困った仕様の方を先に直して欲しい。切に希望します。このせいで Firefox が 1GB メモリを全部食いまくってまともに動かなくなるのが毎日数回 orz
- 起動の高速化などのために、使用ライブラリをスタティックリンクしているぐらいなんで、開発者的には「メモリ使用量は気にしないぜ!」ぐらいの勢いなんじゃないでしょうか。
コンパイルオプションでいろいろいじれることはいじれるんですが、アップデートとかを考えると公式に「通常版」「機能限定軽量版」とかをリリースしてくれませんかねぇ。- っていうかFirefox自体がMozillaの軽量版として
作られ始めたんじゃなかったでしたっけ。
とは言うものの、携帯用としては競争相手(?)の
Operaの名前が現状は目立ちますし、
(単に開発するつもりがないだけでしょうが)
そういった意味では軽量化の余地は結構あるのかも。
#モバイル用のFirefoxもちょっと見てみたいかなあ
- っていうかFirefox自体がMozillaの軽量版として
- 家では、Athlon64 3500+、メモリ1GB、XP SP2 で使ってます。
会社では Pentium4-M 1.6GB、メモリ 512MB、XP SP1 で使ってます。
が、家の方が遅いです。
どうも画像縮小があると劇的に遅くなります。
IMG タグで画像を縮小させていっぱい貼り付けているページなど、
システム全体が止まるくらい重くなります。
が、会社ではそんなページ見ても普通に表示されます。
この差は何なのかな? と。
--
TomOne- 画像展開の方法の問題 [srad.jp]ではないかと。
これはこれで「正しい」(基本に忠実であるという意味で)プログラム手法であるのですが…下手に最適化してメモリリークであぼーんしまくるよりはいいのではないかと。
と言うことで、
>どうも画像縮小があると劇的に遅くなります。
>IMG タグで画像を縮小させていっぱい貼り付けているページなど、
>システム全体が止まるくらい重くなります。
これは、見ているページの方でも配慮して貰わないといけない問題では無いかと思いますよ。
サムネイルを作るのでは無く実画像を送ってブラウザのレンダラに縮小させるというのはブラウザの仕様云々以前に回線帯域の無駄遣いのように思うのですが…
- 画像展開の方法の問題 [srad.jp]ではないかと。
- user_pref("browser.cache.disk.capacity", 4096);
user_pref("browser.cache.memory.capacity", 4096);
これで随分軽快になった稀ガス。
firefox / mozilla ともども。 - 十分メモリの空きがあっても重いような気がするんですけど、なんでなんでしたっけ。
- パンが無いというのなら、お菓子を食べたらいいのでは?
- 「それは仕様です」って叩かれそうな言い方ですね。
それはいいとして、メモリキャッシュ?の保持量を調整するUIくらい用意した方が良いと思います。
Firefoxが対象としている全てのユーザーにabout:configで…なんて言えないだろうし。- 「仕様です」と「仕様がない」のどっちが叩かれるか…ですな。
- 『仕様ほど素敵な障害はない』
配給:20th century fireFOX - FF1.5.0.1でbrowser.cache.memory.capacityは2000に
指定していますが、about:cacheで見るとこうなってるわけです。
Memory cache device
Number of entries: 421
Maximum storage size: 2000 KiB
Storage in use: 17920 KiB
Inactive storage: 0 KiB
上限設定が効いてないんですが、なんかおかしくないですか。
Session Saverとか入れてるせい?
* * http://kb.mozillazine.org/Browser.cache.memory.capacity
見ましたが。
一つ一つの画像データをキャッシュする際に使用できるメモリの最大値であって、
キャッシュメモリ全体の最大値ではない、ということですか。
これはまぎらわしい……それなら200kbくらいで十分かも。
- 単なる仕様を検討を記事にしてどうする?
ってか、前から知られていることを改めてBenが解説しただけじゃん。そんなにFirefoxのメモリって気にしているの?
256Mで一日立ち上げっぱなしのユーザーより。- たまにFirefoxでもフリーズすることがある(それこそ6000x4000の画像ふんぢゃったときとか)ので強制終了させると、
Windowsのバグ報告システムがそのアプリが使っていたメモリ使用状態を精査するために
同じだけの使用量を確保するときがあるんですよ。
タスクマネージャ見てると500MBのメモリx2のアプリが延々とメモリアクセス(スワップアウトしてるのでHDDガリガリ)して
当然重いものだから全然終わんなくて…(涙)
なんてことが続いてました。
#タスクマネージャで強制終了するとバグ報告しないので助かるんですけど。
* バグ報告「が動く」ことで、不都合が起きているのであれば、バグ報告を無効にしてみてはいかがでしょう?
なんらかの状況で、無効にできない or それ以外の理由ならすみません。
[コントロール パネル]-[システム]でシステムのプロパティ]から[詳細設定]に入って、[エラー報告]で向こうにできると思われます。
Firefox使っていないので、はずしてますかね??(それともすでに無効済みですかね)
ポインタ:
http://www.atmarkit.co.jp/fwin2k/win2ktips/527apperror/apperror.html- >単なる仕様を検討を記事にしてどうする?
「軽い」ことを売りにしている(してるよね?)アプリがメモリ1GBを前提にしていたら、そりゃ開発環境について問い直されるべきだよね。
#MicroSoftがメモリ20GB超の環境で開発して「うちでは問題なかったですけど?」と言ったらキレルでしょ?
>ってか、前から知られていることを改めてBenが解説しただけじゃん。
レス数 [srad.jp]みると、それほど広くは知られてなかったようですね。
#つか、about:config [about]の項目って全部見てる?
>そんなにFirefoxのメモリって気にしているの?
何にせよメモリ占有量は気にしてますよ。だって少ない方がイイジャナイ - たまにFirefoxでもフリーズすることがある(それこそ6000x4000の画像ふんぢゃったときとか)ので強制終了させると、
- 可愛い位じゃないっすか?
Safariなんか,ページ開きたくると軽く500MB以上いくんですが....orz
#CPUパワーも持ってかれるし....
#フレームのもとがつけられそうなのでAC。
- WindowsXPだとpagefile.sysの扱いにどうもバグがあるような気がします。
メモリが2Gあるので色々試みたのですが、なしに設定しても残ったり、RAM Diskに移動しても設定が反映されなかったり……。
Googleで探しても同様の症状の報告が見つからないので、私だけかも知れませんが。
ちなみに、hiberfil.sysはコンパネの電源オプションから休止状態を無効にすると消えますよ。
# オフトピですがご容赦を。
* うろおぼえで、掲示板で書き込まれたものからの記憶なのですが。
>なしに設定しても残ったり
Windows2000だと最低**Mbyte必要とかがあったりしますが
(0にすると起動時に勝手に作られる)
WindowsXpでは0にできたような。
今、全部消してみましたが、0になってますね。
ただ、設定する画面の下の方には
「総ページングファイルサイズ 最小限:2MB」ってなってますけど。
# どうせそんなにメモリ必要ないから、しばらくこれで使ってみます。
>RAM Diskに移動しても設定が反映されなかったり……
これは仕様で「HDDとして見えるもの。にしかページファイルが設定できない」という記憶が。
microsoftのサイトのどこかに正式な答えがあったように思います。
* > 今、全部消してみましたが、0になってますね。
ふむ、やはり私のやり方がおかしいのかも知れないですねぇ……。
また色々試してみます。
> これは仕様で「HDDとして見えるもの。にしかページファイルが設定できない」という記憶が。
ちゃんと、HDDに見せかけるRAM Diskドライバ使ってましたよ。
ここの [vector.co.jp]ERAMです。
Windows2000では問題なくRAM Diskにページファイルを設定出来たんですけどねぇ。
# 嗚呼、オフトピが伸びていく。
* * うおお、そんなところに……完全に見落としてました。
嗚呼、駄目人間だなぁ、私。
教えて下さってどうもありがとうございます。
* 関係あるかわかりませんが,
Norton Anitivirusの特定の設定項目が有効になっていると,
ページファイル関係の設定が効かなくなったなった経験があります.
(Autoprotectの起動に関する設定項目だとは思いましたが,正確な項目名は忘れました.)
もし,NAVが入っているようなら,その辺りが原因かも.
- WindowsXPだとpagefile.sysの扱いにどうもバグがあるような気がします。
- 艦長「弾幕薄いよ何やってんの」
で厚くなる弾幕の方が理不尽です。
- 艦長「弾幕薄いよ何やってんの」
- 富豪なやりかたというのは、メモリや実効効率を気にしないで手を抜くところがキモです。
メモリの利用とか実効効率の悪さを競うものではありません。単にそれを気にしないだけです。
なので手を抜いた結果、メモリの利用効率が上がることもありえるわけです。
ページをキャッシュしておくというのは積極的に速度を稼ぐためにコードを書かなければなりません。
翻って、
> 毎回レンダリング結果を使い捨てにすべき
というのは、字面からは積極的に何かしてるように見えますが、
実は何も工夫をしないとこうなるわけでして、
コードを書く労力はこちらのほうが少ないのです。
なので富豪的プログラミングの観点からはキャッシュを保持しておくほうが
ちまちまと貧乏くさいプログラミングということになります。
- 富豪なやりかたというのは、メモリや実効効率を気にしないで手を抜くところがキモです。