• ベストアンサー

こういうのはメモリーリークに該当しますか?

0.9x時代から、ながいことMozilla Suiteを愛用しています。 ところで、ながいこと、Mozillaで困った現象が「どうやら私の環境だけで?」発生します。 画像数の多いホームページを見たり、写真が添付されたメールが続いたりすると、システムの空きメモリーがぐんぐん減ります。 で、画像のないホームページへリンクで移ったり、メールの写真整理が終わって、何時間経っても減ったメモリーが元に戻りません。 Mozillaが起動しているあいだじゅうはキャッシュのつもりで保持されるのかなあ?とも思って、Mozillaを一旦クローズしてみました。 一旦クローズすると、消費メモリーが戻るには戻るのですが、たいがいは半分程度しか戻ってくれません。 (100回に1、2度の割り合いで、ごっそり元通りにメモリーが回復することもたまにあります) 半分しか戻らないメモリーで、再度Mozillaを起動して使っていると、すぐにメモリーは使い切ってしまい、システムが不安定になります。 (多分本当なら、スワップされてシステム不安定は回避される建て前のはずだと思うんですが) あんまり気になるので、Bugzillaに報告をしてみましたが、書き方が不適切でとんちんかんだったのだと思います、全然誰にも相手にして貰えませんでした。 (;;) 私はプログラミングのことがまだよくわからないので、いろいろな「又聞き」でメモリーリークなのかと思い込んでいたのですが、このような現象のことは、何と言えばよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.4

まずメモリ管理しているのは基本的にはOSです。 ですからプログラムの話というよりはos2の話のだと思います。 windowsやlinuxは、プロセスに対し仮想メモリ空間を与え 実際の物理メモリを直接割り振るわけではありません。 その為、プロセス終了時にはそのプロセスに割り当てられた メモリがすべて開放されます。 プロセス終了時のメモリリークは無いつくり になっているのです。 os2がどういう仕組みなのかはわかりません。もし そうでない仕組みならmozillaが開放しないのかもしれません。 >プログラムの常識論としてはメモリーリークが起きる場合、解放されず使い果たされた物理メモリーの代用として、 スワップが代理でフォローしてくれるものでしょうか? まずスワップというのはメモリーが使い果たされたときにはじめて使うわけではありません。 それにスワップの仕組みもOSに依ります。 アプリケーションプログラマはスワップの仕組みを意識してプログラミングはしません。 それにスワップ領域も物理メモリもいっぱいになれば、プロセスはメモリを確保できなくなります。 プロセスがメモリを確保できないとき、どういう挙動をするかはプロセスのプログラムに依ります。 >リークが起きてしまったら、スワップに移動することは出来なくなるのが普通でしょうか? 結局OS内部の話です。 こっちに質問したほうが早いかも http://www.os2.jp/

altosax
質問者

お礼

どうもありがとうございます! >結局OS内部の話です。 なるほど、だからBugzillaでは誰にもとりあってもらえなかったということですね。 理由がはっきりできてすっきりしました。 os2.jpで何年か前に尋ねたことがあったのですが、そこでも誰も他の人の環境では起きていないとのことでしたので、「メモリーリーク」という言葉の意味を一から学んでみようとおもい、こちらで相談してみました。 とりあえず、ビデオドライバが異端児である心当たりがたしかにありますので、まずはこの線から見直してみようと思います。

その他の回答 (3)

  • joe-
  • ベストアンサー率34% (11/32)
回答No.3

不具合の度合いがすごいですね。 OSごと持っていかれているということですね。 ぜんぜん自信はありませんが、何らかのハードウェアが故障している場合に同様の不具合が発生する事があると思われます。 個人的にはメモリかHDDあたりが怪しいのではないかと思います。 例えば、ある程度メモリを消費しないと触らないような領域が壊れていた場合、Mozillaなどの大量にメモリを消費するアプリケーションを使うと壊れた場所を使ってしまい、OSごとご臨終という事が発生します。 HDDに関しても似たような可能性があります。例えば、SWAP領域に割り当てられている箇所が壊れている場合、大量にメモリを消費してSWAPを触ってしまってOSがご臨終という可能性があると思われます。 もし、交換可能なメモリでテストができるのであれば、メモリを交換してみて同様の問題が発生するかどうか見てみると良いかも知れません。 全部、推測でぜんぜん自信はありませんが、不具合の度合いからMozillaの問題ではないような気がします。 Mozillaの不具合としてありえるとすれば、OS2の何らかのシステムコールかドライバがバグっていてMozillaがたまたまそれを使ってしまってOSの動作をとめてしまうなどがあるかもしれませんが、、、

altosax
質問者

お礼

すみません、書き忘れてしまいました。 今回の私のケースは非常な特殊論なのかもしれませんが、それはさておいて、 ごくごく一般的にプログラムの常識論としてはメモリーリークが起きる場合、解放されず使い果たされた物理メモリーの代用として、スワップが代理でフォローしてくれるものでしょうか? それとも、一度メモリーリークが起きると、スワップは働かなくなるのが当然の常識論になりますでしょうか?

altosax
質問者

補足

大変御親切に親身のアドバイスを沢山ありがとうございます。 これが不思議なんです。 一台のマシンをos2とwinでマルチブートにしてあるのですが、同じハードウエアでありながらOS2でのMozillaだけで発生するトラブルなので頭をいためています。 それなら元気に動くWindowsでいつも使えばよい所だと思うのですが、海外からの受信が多く、ウイルス付きのメールとそうでないメールが差出人で容易には判別しきれずフィルター設定も困難なので、うっかり開いても安心なOS2でメールをはじめとする対外的なネット接続の窓口にしている、という状況です。 また、永年OS2形式で作成してしまったデータの蓄積が膨大にあるので、それらを考えるとなかなか移行が進まない状況でもあります。 >OS2の何らかのシステムコールかドライバがバグっていて どうも、その線が濃厚かもしれないですね。 そういえば心当たりとしては、MatroxのOS2ビデオドライバが非常に特殊だという話を思い出しました。 描画が崩れてOSが総崩れに向かう局面を考えると、ビデオカードを他のものに取り替える事で治ってくれる可能性もあるかと思ってみました。 ちょっとこの線で検討してみようと思います。 どうもありがとうございました。

  • joe-
  • ベストアンサー率34% (11/32)
回答No.2

何となく、Mozillaとは関係の無いところで問題が発生しているか、問題があると思っているだけのどちらかである可能性があると思われます。 (もちろん、本当にMozillaに問題があるという可能性もあります) Mozillaを終了してもメモリが戻らないという事でしょうか? Mozillaを終了した後にプロセスは残っていますか? 一般的に、プロセスが終了するとそのプロセスが利用していたメモリは全てOSによって強制的に解放されるので、メモリリークしていてもプロセスを終了してしまえば関係ないはずです。 ただ、例外もあって共有メモリを利用している場合には残ってしまいます。 あと、Mozilla以外を使っている場合は発生しないですか? OSは何ですか?プロセスを終了するのはOSなので、OSの種類によっても答えがかなり変わってくると思います。 OSに入っているファイルシステムは高速化のために大抵キャッシュを行うので、そのために見かけ上メモリが減っているように見える場合が多いですが、プロセスによるメモリの確保が必要になったら自動的にファイルキャッシュは解放されるのが一般的です。 あと、最後に、不安定とは具体的にどうなるのでしょうか?

altosax
質問者

補足

はじめまして、joe-さん、どうぞよろしくおねがいします。 >何となく、Mozillaとは関係の無いところで問題が発生しているか、問題があると思っているだけのどちらかである可能性があると思われます。 #1のご回答でもご指摘いただいた通りOS側に問題がある可能性が濃厚かもしれませんね... >Mozillaを終了してもメモリが戻らないという事でしょうか? はい、そうです。 他のOSでMozillaを試すと、スレッドが終了するごとにメモリ開放しているように残量計では見えましたが、OS2だけは握ったメモリが開放されません。 >Mozillaを終了した後にプロセスは残っていますか? これは重症になるとプロセスが残ってしまって、killコマンドが必要になってしまいます >メモリリークしていてもプロセスを終了してしまえば関係ないはずです。 そうですよね。 ところがkillしても100%はメモリーが戻らないことがほとんどです。ごくたまにごっそり戻ってくれることがあり、そんな時は疑問と喜びと半々で複雑な気持ちになります。 (100%という単語は、モジラ起動前のメモリ残量と同等にならない、という程度の意味とお受け取り下さい) >ただ、例外もあって共有メモリを利用している場合には残ってしまいます。 なるほど、共有メモリー利用という可能性も視野に必要だったんですね! これは例えばMozillaファミリーの別アプリを複数起動しているような場合のことになりますでしょうか? (今の所はSuiteしか使っていませんので、モジラ関連の共有DLLなどは他のアプリが使う可能性はないと予想しています) >あと、Mozilla以外を使っている場合は発生しないですか? はい、使うアプリの数に限りが有るのでなんとも言えないのですが、Mozilla以外でメモリ開放されずに困った事は一度だけ、「メモリーリークの不良がありました」とアナウンスのあったアプリで経験したことがあります。 >OSは何ですか?プロセスを終了するのはOSなので、OSの種類によっても答えがかなり変わってくると思います。 そうですよね、OS2warp4です。FIXパックと新カーネル入れ替えは最新に努めていますが、元バージョン自体は3世代前のv4.0です。 >プロセスによるメモリの確保が必要になったら自動的にファイルキャッシュは解放されるのが一般的です。 そうですよね。 さらには、物理メモリーがゼロになってもスワップが効いてくれて、みかけ上は重大被害は被らないでよいはずの建て前ですもんね。 どうもスワップが実行されないまま、システムが被害を受けているような経過のように画面上では見えています。 >あと、最後に、不安定とは具体的にどうなるのでしょうか? 具体的にはグラフィック表示が停止した後に、一見、シェルが落ちたような状態になります。 (グラフィックが停止するので、その時点でのメモリー残量計の針の動きはもう見る事が出来ない状態です) 通常のシェル落ちだと、しばらくしてまた復帰してくれますが、メモリーリークの時は(Mozilla以前に他のソフトで経験した時も同様に)シェルの復帰ができないまま再起動が必要になります。 そして、トラップエラーなどの表示も何も出る余地がありませんので、何が起きているのか原因をつかむのが非常に困難です。 メモリーリークの一般論として、リークが起きてしまったら、スワップに移動することは出来なくなるのが普通でしょうか? それとも他の現代OSではメモリーリークが起きてもスワップの範囲内で吸収することができますでしょうか? どうぞよろしくおねがいします。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

メモリリークに類する現象のように思います。ただし、質問の文章のみからでは、次の点を確認することができません。 1. Mozilla起動中に「システムの空きメモリーが減る」という現象が、Mozillaがメモリを使用する(システムに対して要求する)ことによって発生しているのか否か。 ※ファイルキャッシュ等の用途でシステムが自主的にメモリを使用しているのか、それともMozillaがメモリを使用しているのか。 2. Mozilla起動中に、Mozillaに割り当てるメモリが際限なく増えているのか否か。 ※Mozillaにメモリリークがあるのか否か。 3. Mozilla終了時に、Mozillaに割り当てられたメモリが100%開放されているか否か。 ※システムにメモリリークがあるのか否か。 4. Mozilla終了時に、システムがMozillaのために使用していたメモリが100%開放されているか否か。 ※Mozilla/システムのいずれか、あるいは両方にメモリリークがあるのか否か。 ファイルキャッシュ等の用途でシステムが自主的にメモリを使用することがある(特にWindows 2000/XPではその傾向が著しい)ので、空きメモリの増減だけでは「誰がメモリをどれだけ使用しているのか」を特定することはできません。 これを特定するためには、メモリ監視用の開発者向けツールを使用する必要があります。もし興味がおありでしたら、その手のツール(umdh.exe)の使い方の解説が 「Umdh.exe を使用してメモリ リークを検出する方法」 http://support.microsoft.com/kb/268343/ja にありますので参照してください。 なおumdh.exeの最新版は 「Debugging Tools for Windows」 http://www.microsoft.com/japan/whdc/devtools/debugging/default.mspx に入っています。解説の中で使われているumdh.exeは古いバージョンなので最新のものとは動作が一部異なりますが、基本的な考え方は変わりません。

altosax
質問者

お礼

いつも大変お世話になります! これはちょっと今の私のレベルでは切り分けする方法がわからないのですが、「自分で思った範囲」では、こんな受け止め方をしています。 >※ファイルキャッシュ等の用途でシステムが自主的にメモリを使用しているのか、それともMozillaがメモリを使用しているのか。 >※Mozillaにメモリリークがあるのか否か。 Mozilla以外の大量メモリー喰いソフト(グラフィックビューワ-等)では、スレッドが終了した時点で逐次開放してくれているのをメモリー残量計で確認できるんです。 ∴モジラだけに問題がありそうだ、と踏んでみました。 >※システムにメモリリークがあるのか否か。 ははあ、なるほど、こういう線も考えないといけなかったんですね! OS2warp4だけでこのトラブルが発生しています。 心配だったのでWindows98とMacOS9で試した所はきちんとメモリ開放してくれました。 OS2のカーネルは適宜最新版に入れ替えて使っていますので、そのせいでシステム側に問題があるかもしれないですね・・・(しかしこの現象に気付いてから3、4年間、最新カーネルに何度か換える機会がありましたが変化なしでした) >※Mozilla/システムのいずれか、あるいは両方にメモリリークがあるのか否か。 どうも根深い厄介な問題が潜んでいそうですね・・・ Mozilla以外のアプリでメモリーが解放されない例が今の所無いので、組み合わせの一つ、としては確かだと思いますが、システム側が治れば全てが治る、となると調べるのが大変になりそうです。 Mozilla側のバージョンは安心優先にしたいのでRCかマイルストーン版しか使った事が有りません。 カーネルが古かった頃は、強制メモリー開放ツールを適宜動作させてしのいだのですが、ここ数年のリビジョンだと開放ツールが動作できなくなり、リセットしか方法がなくなってしまいました。 しかしこの現象がほぼ「メモリーリーク」と表現してよい状態、とわかって安心出来ました。 また少し文面を考え直してBugzillaに挑戦してみたいと思います。 本当にいつも御親切にどうもありがとうございました!

関連するQ&A