スワップ空間の解放


10

時々、十分な物理メモリがあり、私はfirefoxを使用しているにもかかわらず、カーネルは、例えばfirefoxをスワップ状態に維持しようとするようです。

robert@rm:~> free -m
             total       used       free     shared    buffers     cached
Mem:          3009       1904       1104          0        109        679
-/+ buffers/cache:       1116       1892
Swap:         4102        885       3216

カーネルにスワップ領域を削除し、利用可能な空きメモリを使用するように指示するコマンドはありますか?


更新:短期的にはswapon / swapoffを使用しましたが、今は設定しています

sudo sysctl vm.swappiness=30

別の応答で提案されているように、非常に良い結果が得られます。

回答:


2

あなたは可能性がありませんswapoff root権限が必要になります、 -
私はそれがあなたのための問題ではないと思いますが、。


15

nikが提案したことを実行して、swapoffを使用できます。ただし、「スワッピング」を微調整する別のよりエレガントな方法、またはカーネルが2.6カーネルを実行しているシステムのディスクにプログラムを積極的にスワップする方法があります。

Linuxカーネルのメーリングリストでは、スワッピングの動作に関してカーネルが従うべきポリシーに関する議論が白熱しています。その結果、2.6カーネルにこの動作を大幅に調整できるパッチが追加されました。

swapoff / swaponコマンドを実行する場合と同様に、これを行うにはルート権限が必要であることに注意してください。

「swappiness」の現在の値は、/ proc / sys / vm / swappinessファイルで、または次のsysctlコマンドを実行することで確認できます。

sudo sysctl vm.swappiness

「スワップ」の値は、0(スワップなし)から100(可能な限りディスクにスワップ)の範囲です。Ubuntuには、デフォルトのswappinessが60に設定されて出荷されます。

セッションでこれを変更するには、sysctlを再度呼び出して、使用するswappiness値を渡します。

sudo sysctl vm.swappiness=30

freeの他に、優れたhtopまたはiotopユーティリティを使用して、これを行う効果をもちろん監視できます。

あなたは何を見て、再起動しても、この値を保持したい、だけの場所が好きなら「vm.swappinessを= 30」に/etc/sysctl.confファイル。

$ sudo sysctl vm.swappiness
vm.swappiness = 30
$ sudo sysctl vm.swappiness=40
vm.swappiness = 40
$ sudo sysctl vm.swappiness
vm.swappiness = 40
$ sudo tail /etc/sysctl.conf 
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#
# The contents of /proc/<pid>/maps and smaps files are only visible to 
# readers that are allowed to ptrace() the process
# kernel.maps_protect = 1
vm.swappiness=30

マシン上で許容できるレベルのスワッピングを必要とする値が見つかるまで、さまざまな値で遊ぶことができます。


sysctlの場合は+1。swappinessの異なる値を試す場合、procファイルに直接書き込むことができます(echo "30"> / proc / sys / vm / swappiness)。この変更は一時的なものであり、/ etc / sysctl.confには書き込まれません。設定に満足したら、sysctlを使用して「永続的な」変更を行います。
ショーンチン

6

スワップの内容は、今よりも忙しい時期にそこに置かれたことを思い出してください。

データ RAMにあることがわかります-使用のためにロードし直されましたが、スワップから消去されていません。カーネルは、次のビジー期間の時間を節約するためにこれを行います-データが既にそこにコピーされている場合、最初にディスク書き込みを行う代わりに、使用しているRAMを解放するだけです。そのため、近い将来にマシンが再びスワップする必要がないことがわかっていない限り、スワップスペースの解放を強制しても、次にスワップが必要になったときに少し遅くなること以外は何も達成されない可能性があります。

これは、書き込み時削除ベースで管理されるため、RAM内のコピーが更新されると、スワップ内のブロックが解放されます。

スワップスペースが他の何かのために必要な場合、それは十分な空きがあるため現時点ではありませんが、もちろんその使用のために解放されます。

からの出力では、この状態(スワップ領域のディスクベースのページとRAMの両方)にあるデータの量を確認できませんfree/procただし、特別なファイルシステムを介して表示できます。出力を見てcat /proc/meminfoのためSwapCachedのカウント。

明らかに予備のメモリがあるときに使用中のスワップがあるもう2つの理由は

  • I / Oの負荷が高い場合、カーネルは年齢に使用されていないページをスワップアウトする方が適切であると判断し、キャッシュ/バッファにRAMを使用できるようになりましたが、free出力はおそらくここではありませんIOキャッシュ/バッファで使用されるものと同様に、未割り当てのRAMのチャンクがあります。
  • 何らかの理由でページが以前にスワップアウトされたため、再び必要になることはありませんでした。おそらく、しばらくアクティブでないプロセスによって使用されているメモリです。この場合、スワップを解放する(したがって、ページをRAMに戻す)と、次にスリープ以外の操作が必要になったときにそのプロセスの応答時間が改善される可能性がありますが、しばらく非アクティブになっている場合は不要になる可能性がありますとにかく近い将来いつでも。

1
素晴らしい説明のために+1。参考までに、vmstatを使用すると、/ proc / meminfoデータのすべてが表示されるわけではありません。
nagul 09

1

これfreeはメモリ使用量の単なるスナップショットであることに注意してください。表示されている結果は、過去のある時点で、システムがRAMが不足していたため、RAMに常駐する素材がスワップアウトされたことを意味する場合があります。それ以来、RAMは無料になりましたが、スワップの素材は必要ないので、RAMを乱雑にするのではなく、スワップに保持されます。その場合、スワップをオフにすることは悪い考えです。最後のリロード以降、このような大量のRAMを要求する可能性のあるプロセスはありますか?

さらに、ulimitで設定された最大常駐サイズに制限がないことを確認することもできます(通常は/ etc / profileですが、ディストリビューションによって異なる場合があり、プロセスごとに設定できます(起動スクリプトなど)。 )。

最後に、Microsoft Windowsでは、Firefoxがディスクにスワップアウトされる特定の問題、たとえば最小化された場合(例: http://joeabiraad.com/mozilla-firefox/control-your-firefox-ram-usage/113)。GNU / Linuxシステムで聞いたことはありませんが、調査する価値があるかもしれません。


答えてくれてありがとう。私の問題は、スワップが使用されていることではなく、アクティブなプログラム、たとえばFirefoxやThunderbirdで使用されていることです。swapoff / swaponにより、彼らは再びきびきびした気分になりました。
ロバートムンテアヌ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.