Linuxでスワップサイズが常に増加し、スワップスペースが再利用されていないのですか?


10

4 GBのTomcatサーバーが実行されている8GB RAMのLinuxボックスがあります。それらの1つは3000MBメモリー(jvm -Xmsおよび-Xmx設定)に設定され、その他は1500MBに設定されます。スワップパーティションも8ギガに設定されています。これらのサーバーを起動すると、スワップファイルの使用率が低くなります。ただし、1日のうちの1つまたはすべてのサーバーがピーク状態にある特定の時間帯に、スワップの使用量が増加し始めます。次に、典型的なsar -r出力を示します。

kbmemfree kbmemused%memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad

48260 8125832 99.41 196440 2761852 7197688 1190912 14.20 316044

75504 8098588 99.08 198032 2399460 7197688 1190912 14.20 316032

現在使用されている14.2%のスワップを示しています。面白いことに、この%は決して減少しませんそれは増加し続け、最大30-40%に達します。サーバーは毎週再起動します。

%swpusedは、ピークアクティビティの期間中に増加し、アクティビティの少ない期間中に減少すると想定します。または、少なくとも一定のままです。これは、スワップスペースがOSによって再利用されることはないようです。

freeの出力:free -mキャッシュされた使用済みの共有バッファの合計Mem:7982 7937 45 0 32 2088-/ + buffers / cache:5816 2166 Swap:8191 1163 7028

つまり、少なくとも2gの無料のRAMがあります。それで問題は、なぜスワップ領域が増え続け、OSによって解放されないのかということです。またはこれをデバッグして何が起こっているかを理解する方法..

回答:


12

infoがディスクにスワップアウトされ、後でメモリに読み込まれる場合、スワップ領域が少なくなるまで、スワップ領域に割り当てられたままになることがよくあります。つまり、同じ情報を後で再度スワップアウトする必要があり、変更されていない場合、OSは、ディスク節約時間に何も書き込む必要なく、割り当てられたRAMからページをドロップすることができます。

メモリに読み込まれたものに割り当てられたスワップも解放されます

  1. 関連ページがまったく不要になったとき(つまり、アプリケーションによって解放されたとき)
  2. 関連ページが変更されたとき(そのため、ディスク上のコピーは最新ではなくなります)
  3. マシンのスワップ領域が不足しているため、RAMに既にあるものをクリアして空き領域を作る

/proc/meminfo「SwapCached」という行を探します。このエントリは、RAMとスワップパーティションの両方で見つかったページをカウントします。たとえば、小さいVMをランダムに選択する/proc/meminfoと、私のVMの1つである仮想ファイルに次のように表示されます。

SwapTotal:        698816 kB
SwapFree:         624520 kB
SwapCached:        17232 kB

74268Kのスワップ領域が割り当てられていることを示していますが、これらのページの17232K値も現在RAMにもマップされています(そのため、他の領域で領域が必要な場合は、すぐにスワップから割り当て解除できます)。

また、何年も前にスワップアウトされて以来、二度と使用されていないページがそこに置かれたことは間違いありません。カーネルはスワップからページをリロードしません。それは、それを読み戻す空きRAMがあるからといって、その空きRAMはキャッシュまたはバッファーに使用する方がよいためです。スワップに書き込まれたページは、通常、次に必要になったときにのみ再読み込みされます。

スワップに何があるかをクリアしたい場合は、十分な空き容量または空き容量(つまり、free + cache + buffers(c + bカウントのうち、RightThisInstantではない部分)を除く)がある限り、そのままにしてください。オフにして、再びオンにしswapoff -a && swapon -aます。

もちろん、メモリリークが発生している可能性もありますが、これが動作の唯一の説明ではありません。


すばらしい答え。ありがとう。したがって、私のシステムには現在、SwapTotal:8388600 kB SwapFree:7197688 kB SwapCached:595724 kBと表示されています。したがって、実際のスワップフリー= 7197688 + 595724 =7793412。使用されるActulスワップ= 8388600-7793412 = 595188 == 581MB。スワップファイルの使用量は581MBで、4つのアプリが実行されている8GBシステムには妥当だと思います。これを数日間監視して、swapCachedの値が%swapUsedに比例して増加し続けるかどうかを確認します。
Zenil、2010年

2

基本的に、これを気にする必要はありません。知っておくべき重要なことは、スワップへのIOの量です( 'vmstat'コマンドを見てください)。スワップに多くのものを入れてもコストはかかりません。唯一のコストは、ものをスワップに入れる(ページイン)または取り出す(ページアウト)ことです。したがって、OSがスワップを増やすことは完全に合理的です。


1
スワップが増加し、減少しない理由を理解することが重要です。サーバーを数週間実行し続けることができるとしたらどうでしょうか。スワップは制限を超えて増加し、メモリの問題が発生しますか?ピーク活性の期間中に「合理的」swapin /スワップアウトのルックス..ある高swapin正常期間中/スワップアウト(および%swapused増加).. swapin /スワップアウトは最小であるが、swapused%が減少されていない
Zenil

0

利用可能なスワップスペースがある限り、OSがスワップスペースを解放する必要はありません。スペースがなくなると解放されます。あなたがこの状況に陥ったとき、あなたは間違いなく問題を抱えています。


0

それが問題になるかどうかを確認するのに十分な時間サーバーを実行しない限り、これが最終的に問題になるかどうかを判断する方法はありません。

基本的に、OSは使用されていないものをスワップして、新しいプログラムが開始された場合に備えて、常にいくつかのメモリを解放します。スワップスペースは必要になるまで解放されません。つまり、100%のスワップスペースを使用でき、パフォーマンスの問題は発生しません。心配するのは、これがメモリリークによって引き起こされているかどうかです。これは必ずしもメモリリークではありませんが、可能性があります。

Javaはメモリリークの傾向はありませんが、特に複雑なアプリで発生する可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.