web-dev-qa-db-ja.com

スワップスペースの解放

時々、カーネルは例えばを維持することを意図しているようです。十分な物理メモリが利用可能で、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

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

10
Robert Munteanu

do aswapoff -root権限が必要です。
しかし、それはあなたにとって問題ではないと思います。

2
nik

Nikが提案したことを実行して、swapoffを使用できます。ただし、「スワップネス」を微調整する別のより洗練された方法、つまり、2.6カーネルを実行しているシステムでカーネルがプログラムをディスクにスワップアウトする方法があります。

Linuxカーネルのメーリングリストでは、 スワッピング動作 に関してカーネルが従うべきポリシーについて激しい議論がありました。結果として、2.6カーネルに patch があり、この動作を大幅に微調整できます。

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

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

Sudo sysctl vm.swappiness

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

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

Sudo sysctl vm.swappiness=30

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

表示された内容が気に入って、再起動後もこの値を保持したい場合は、/ etc/sysctl.confファイルに "vm.swappiness = 30"を配置するだけです。 。

$ 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

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

15
user4358

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

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

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

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

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

明らかに予備のメモリがあるときにスワップが使用されているもう1つの理由は次のとおりです。

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

freeはメモリ使用量のスナップショットにすぎないことに注意してください。あなたが見ている結果は、過去のある時点で、システムがRAMなので、RAMに常駐するマテリアルをスワップアウトしていました。それ以来、RAMは無料になりましたが、スワップの資料は必要ないため、RAMを乱雑にするのではなく、スワップに保持されます。その場合、スワップをオフにすることはお勧めできません。可能性のあるプロセスはありますか。前回のリロード以降、このような大量のRAMを要求しますか?

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

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

1
mas