空きRAMが消える-メモリリーク?


11

新たに起動したシステムでfreeは、1.5GがRAMを使用していることを報告します(8G RAM全体、lightdmおよびplasmaデスクトップを備えたUbuntu 12.04、1つのコンソールウィンドウが起動しました)。私が使用しているアプリを実行していても、消費するのはまだ2G以下です。ただし、システムを数日間実行すると、使用中のアプリのリストに表示されずに、ますます多くの空きRAMが消えます:使用smem --pie=name率が20%未満(および80%が使用可能)であると報告されているが、他のすべてのメッセージ異なる。free -mたとえば、約7日目のレポート:

             total       used       free     shared    buffers     cached
Mem:          7459       7013        446          0        178        997
-/+ buffers/cache:       5836       1623
Swap:         9536        296       9240

(ご覧のとおり、バッファでもキャッシュでもありません)。今日、これはようやくシステムが完全にクラッシュして終了しました:Windowsマネージャーが消え、アプリが「空中にぶら下がっています」(フレームレス)-ポップアップが「開いているファイルが多すぎる」ことを通知します。syslogレポート:

kernel: [856738.020829] VFS: file-max limit 752838 reached

そこで、閉じることができたアプリケーションを閉じ、Ctrl-Alt-backspaceを使用してXを強制終了しました。Xはその後failsafeXを使用して再度起動しようとしましたが、構成を検出できなくなったため、起動できませんでした。そこで、Ctrl-Alt-F2を使用してコンソールに切り替え、考えられるすべての情報(vmstat、free、smem 、、proc/meminfolsof、ps aux)をキャプチャし、最終的に再起動しました。Xは再びfailsafeXを思いつきました。今回は、「バックアップされた構成から回復する」ように指示し、コンソールに切り替えstartxて、グラフィカル環境の起動に使用しました。

Xを殺した後、free -m出力は次のようになったため、X自体またはXで実行されている一部のユーザープロセスのいずれかを使用する必要がありますが、この問題の原因について本当の手がかりはありません。

             total       used       free     shared    buffers     cached
Mem:          7459       2677       4781          0         62        419
-/+ buffers/cache:       2195       5263
Swap:         9536         59       9477

(〜3.5GBが解放されます)-再起動後の出力と比較するには:

             total       used       free     shared    buffers     cached
Mem:          7459       1483       5975          0         63        730
-/+ buffers/cache:        689       6769
Swap:         9536          0       9536

さらに2つの便利な出力が提供されmemstat -uます。クラッシュの少し前:

User     Count     Swap      USS      PSS      RSS
mail         1        0      200      207      616
whoopsie     1      764      740      817     2300
colord       1     3200      836      894     2156
root        62    70404   352996   382260   569920
izzy        80   177508  1465416  1519266  1851840

Xを殺した後:

User     Count     Swap      USS      PSS      RSS
mail         1        0      184      188      356
izzy         1     1400      708      739     1080
whoopsie     1      848      668      826     1772
colord       1     3204      804      888     1728
root        62    54876   131708   149950   267860

そして、再起動後、Xに戻ります。

User     Count     Swap      USS      PSS      RSS
mail         1        0      212      217      628
whoopsie     1        0     1536     1880     5096
colord       1        0     3740     4217     7936
root        54        0   148668   180911   345132
izzy        47        0   370928   437562   915056

1週間のファイルシステム使用量 1週間のカーネル/ CPU使用率

編集:監視システムから2つのグラフを追加しました。興味深いことに、メモリ消費に「ジャンプ」があるたびに、CPUもピークに達します。今すぐこれを見つけました-それは、X自体を指し示す別のインジケーターを思い出させます:私のマシンに戻って画面のロックを解除するとき、しばしばCPUで重い仕事をしている何かを見つけました。と確認するとtop、それは常に判明した/usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none

この長い説明の後、ついに私の質問:

  1. 考えられる原因は何ですか?
  2. 関係するプロセス/アプリケーションをよりよく特定するにはどうすればよいですか?
  3. この動作を回避するためにどのような手順を踏むことができますか?X日間すべてマシンをリブートするのに短いですか?

古いマシンで8.04(Hardy)を約5年間実行していましたが、同じようなことは一度もありませんでした(常に100日以上の稼働時間、カーネル更新などのために再起動する前)。これは、12.04の新規インストールを備えた完全に新しいマシンです。重要な場合、いくつかの仕様:

Radeon(tm)HDグラフィックス搭載のAMD A4-3400 APU、オープンソースati / radeonドライバー(fglrxがインストールされていない)、8GB RAM、WDC WD1002FAEX-0 hdd(1TB)、Asus F1A75-V Evoメインボードを使用 Ubuntu 12.04 64ビットとKDE4 / Plasma。通常、アプリは多かれ少なかれ恒久的に開き、Evolution、Firefox、konsole(Midnight Commanderを実行中、約4つのタブ)、およびLibreOfficeに加えて、Calibre、Gimp、Moneyplex(私はすでに20年近く使用している銀行ソフトウェア、 Hardyで問題なく動作したバージョン)。

編集: 今日、私は「邪悪な男」の1人を見つけました:KDE4sプラズマデスクトップ。使用したメモリは、最大5GBでしたkillall plasma-desktop && plasma-desktop。これにより、1.3GBのRAMが解放されました!ps言う:

                             RSS    SIZE   VSZ
plasma usage before restart  120988 526472 1300816
plasma usage after restart   92352  495972 1263632

では、1.3GBはどこにあるのでしょうか?これらの値の差分は、合計すると、1.3MBではなく96MBになります。

そして、3.7GBがまだ使用されているので、これは1つの部分にすぎません(2GB未満でなければなりません)。過去6日間、いくつかのツールを使用してこれを監視しました。使用済みメモリ(キャッシュとバッファについては説明していません)はゆっくりですが着実に増加します。たとえ私が机に何も走らなくても...

開いているファイルを使用したプロセスの監視については、現在、次の1ライナー(シェル、特にbashが大好き)を使用して、トップ5を取得しています。

echo "$(for pid in $(ls -a /proc|egrep '^([0-9])*$'|sort -n 2>/dev/null); do \
if [ -e /proc/$pid/fd ]; then FHC=$(ls -l /proc/$pid/fd|wc -l); \
if [ $FHC -gt 0 ]; then PNAME="$(cat /proc/$pid/comm)"; \
echo "$FHC files opened by $pid ($PNAME)"; fi; fi; done)"|sort -r -n|head -n5

読みやすくするために、ここに4行でコマンドを入力します。そこからはまだ何もありません-Skypeがインターネット接続の切断を好まないことを除いて。切断するたびに、開いているファイルがわずかに増加しますが、劇的なことはありません。一方、プラズマもその原因であるようです:

VFSの使用(2日間)

最後にファイルハンドルのドロップが表示されますか?それがプラズマの再起動でした。


ないsudo bash -c 'sync; echo 3 > /proc/sys/vm/drop_caches'余分なラムをクリアしますか?次を使用してプログラムの開いているファイルを表示できますlsof
Savvas Radevic

また、デスクトップマネージャーを切り替えてみましたか?例:lxde(またはlubuntu-desktop)?最後に、ディスクへの出力は問題ありませんか?ライブcdを使用して、ディスクのSMARTデータとディスクとの間でファイルをコピーする速度を確認しましたか?
サヴァスラデビッチ

これをチェックして、リークがあるかどうかを確認します。メモリリークを検出する方法
Mitch

@medigeek:私が指摘したように、キャッシュとバッファは問題ではありません。の出力を参照してくださいfree。実際に私が検討した別のDEへの切り替え。KDE3.5が利用可能であった場合、私はプラズマに行き着きませんでした。これは、Plasmaが関係しているかどうかを確認するための一時的なものです。
イジー

@Mitch:memprofは既知のプロセス(まだ分離していない)に対して使用されることを理解しました。システム全体で使用できますか?さらに、「too many open files」エラーが示唆するように、私には、何らかのプロセスが多くのファイルハンドルを開いており、それらを解放しないように見えます。それがmemprofによってキャッチされるかどうかはわかりません。現在、開いているファイルによって上位5つのプロセスをキャプチャするスクリプトを設定しています。
イジー

回答:


6
  1. 膨大な数のオープンファイルは、何か問題が発生していることを示す良い手がかりです。私の推測では、KDEシステムデーモンでしょう。

  2. コンソールを開き、「top」を実行します。次に、<および>を使用してソート列をVIRTまたはRESに変更し、どのプログラムが最もメモリを使用しているかを確認します。メモリリークは、リークしたメモリへのポインタが失われると使用されず、スワップアウトされるため、仮想メモリの使用量が大幅に増加するために現れます。また、「lsof」を実行して、多数のオープンファイルがあるプロセスを探します。これは、実際にはファイル記述子のリークのようです。

  3. プログラムを追跡し、バグを報告してください。


私はすでにこのためにtop / htopを利用しようとしました。問題は、常駐メモリについては結果が表示されないことです(上記のように、実行中のアプリに使用できるメモリのごく一部しか接続できませんでした)。また、VIRTualメモリに関しては、解釈が困難です(起動直後でも、ここで使用される仮想メモリの合計は最大3TBです-私のハードドライブでさえ処理できないサイズです)。そのため、現在、Evolutionは1.9GB VIRTを使用していますが、使用中のメモリは合計で1.2GB(キャッシュとバッファを除く)になります。そして、はい、私の最初の意図はプログラムを追跡することですので、バグを
報告

監視システムから2つの画像を追加しました。「ジャンプ」は常に同じ時間に発生したように見えます(ただし、1つの例外)。残念ながら、imgはcronで確認するタイムスタンプを提供しません。ところで:どのプロセスがいくつのファイルを開いているかを監視する方法はありますか?
イジー

1
あなたの推測は良いものでした。デーモンではありませんが、主にKDEコンポーネントであるプラズマデスクトップ(上記参照)です。それについての面白いこと:私はちょうどそれを理解し、ここに投稿しました-そして、10分後に私の毎日apt-get update && apt-get upgradeにプラズマデスクトップの更新がありました。それらの人は速いですX)今、私はそれを宣言する前に、問題が解決されたかどうかを見るためにしばらくそれを見ます。これまで、物事は非常に有望に見えます。
イジー

まだ安定しています。「邪悪なプロセス」lsoftop私にも指摘しませんでしたが、KDEデーモンに関するあなたの推測はトラブルメーカーの方向に私を指摘しました。それで、ありがとうございます。私のマシンの稼働時間は約14日で、VirtualBoxやコンパイルなどを並行して実行しましたが、すべてが安定しています。だから私はこれを解決したと考え、最も近い一致をマークします:)
Izzy

0

それは通常のシステムの振る舞いだと思います。ほとんどの場合、すべてが正常です。

LinuxがRAMをどのように管理しているのか、なぜ心配する必要がないのかを理解するために、このすばらしい論文(Linuxは私のRAMを食べました)を読むことができます。

http://www.linuxatemyram.com/


4
ああ-7日後に "too many open files"エラーが発生してシステムがクラッシュした場合、それが "通常のシステム動作"だと聞いたことはありません。私はLinuxを約15年間実行していますが、これはありませんでした。そして、はい、Linuxがどのように「空きRAM」を使用するか(キャッシュなどに使用する方法)を完全に理解しています。上で指摘したように、キャッシュとバッファはここでは問題ではありません。正当な理由でRAMが使用されているという話ではありません。Linuxはスワッピングの代償としてキャッシュに固執することはありません。
イジー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.