2017-04-16 21 views
-1

私はLinuxカーネル2.6.38を使用していますが、4GBのメモリを割り当てるプロセスを実行しています。アプリケーションを実行すると、スワップ空間から。しかし、私のアプリケーションは非常に長い時間実行され、スワップ空間のデータに何度もアクセスします。 4 GBのRAMと、Linuxのスワップ領域メモリを解放しない

  • 私は、Linux 2.6.38を実行しています:

    (編集後) は私がやっているものを明確にします。

  • アプリケーションを実行していないと、システムは約500MBのRAMを占有しています。

  • 4GBのメモリを割り当て、割り当てられたメモリをシークし、そのメモリの値を何度も変更する(10回の繰り返し)単純なアプリケーションを作成しました。

  • アプリケーションを実行するためにスワップスペースが必要であることは明らかです。

  • 私のアプリケーションを実行すると、スワップ領域は累積し続け、数回の反復の後でいっぱいになり、プロセスは強制終了されます。

  • プロセスが終了すると、スワップ領域もいっぱいになります。

  • 最近のカーネルでアプリケーションをテストしたところ、うまくいきました。スワップ領域は累積しません。

これはこのカーネルバージョン(2.6.38)のバグですか?それに修正がありますか?

+0

あなたの質問は非常に不明ですが、おそらく、メモリを増やしたデバイスを使用し、一度にメモリを割り当て、スワップスペースを追加してください。あなたのプロセスは "swappiness"(https ://en.wikipedia.org/wiki/Swappiness) "、あなたのニーズに合わせて変更することができます。 – ti7

答えて

0

私の回答があなたの質問に答えてくれるのかどうかわかりませんが、似たような質問をしました。

Linuxがメモリ(RAM/SWAPP)を割り当てるときに要約すると、必要なときに解放されるだけです。つまり、プロセスが終了した後でも、割り当てられたメモリは、別のプロセスが領域を必要とするまで残ります。

しかし、あなたがSWAPPを解放したい場合は、手動でそれを行うことができます

sudo swapoff -a 

あなたはそのlinkthat one

でより多くの情報を見つけることができ

sudo swapon -a 

に戻ってそれを回すことを忘れないでください

1

メモリリークはありません。

アプリケーションが使用可能なメモリよりも多くのメモリを必要とする場合は、その一部がスワップに書き込まれると仮定しています。これは必ずしも真実ではありません。

システムは、現在使用されていないため、完全に関係のない他のプロセスをスワップに書き込む可能性があります(一般的にはそうなります)。

このスワップ領域はアプリケーションに属していないため、アプリケーションが終了した後も引き続き使用されます。

このスワップスペースは、空きRAMがあるときにLinuxがプリエンプティブにロードしないので、長い間、さらに使用されている可能性があります。

関連する問題