GNU/Linux スワップブロックシステム

GNU/Linux スワップブロックシステム

私は4MB RAMから512GB RAMの範囲のシステムでGNU / Linuxを使用してきました。交換が開始されると、ほとんどの場合、まだログインして問題のあるプロセスを終了できます。たった100-1000倍の忍耐力を持っていれば良いのです。

新しい32 GBシステムで変更されたもの:スワップを開始するとブロックされます。時にはディスクアクティビティがいっぱいですが、時にはディスクアクティビティがない場合があります。

考えられる問題を特定するためにこのプログラムを作成しました。アイデアは次のとおりです。

1 grab 3% of the memory free right now
2 if that caused swap to increase: stop
3 keep the chunk used for 30 seconds by forking off
4 goto 1

-

#!/usr/bin/perl

sub freekb {
    my $free = `free|grep buffers/cache`;
    my @a=split / +/,$free;
    return $a[3];
}

sub swapkb {
    my $swap = `free|grep Swap:`;
    my @a=split / +/,$swap;
    return $a[2];
}


my $swap = swapkb();
my $lastswap = $swap;
my $free;
while($lastswap >= $swap) {
    print "$swap $free";
    $lastswap = $swap;
    $swap = swapkb();
    $free = freekb();
    my $used_mem = "x"x(1024 * $free * 0.03);
    if(not fork()) {
    sleep 30;
    exit();
    }
}
print "Swap increased $swap $lastswap\n";

このプログラムを永久に実行すると、システムはスワップ制限に達しますが、最小スワップ量だけを取得し、非常に遅くなります(たとえば、一度に最大数MB)。

私が実行した場合:

forever free | stdbuf -o0 timestamp > freelog

毎秒Exchangeがゆっくりと上昇していく様子がわかります。 (永遠にタイムスタンプhttps://github.com/ole-tange/tangetools)。

しかし、それは私が見る動作ではありません。ジャンプ全体でスワップが増加し、ジャンプ中にシステムが完全にブロックされていることを確認します。システムは30秒間ブロックされ、スワップスペースの使用量は1 GB増加します。

secs
169.527 Swap:     18440184     154184   18286000
170.531 Swap:     18440184     154184   18286000
200.630 Swap:     18440184    1134240   17305944
210.259 Swap:     18440184    1076228   17363956

ブロック:21秒。スワップは2000MBを追加します。

307.773 Swap:     18440184     581324   17858860
308.799 Swap:     18440184     597676   17842508
330.103 Swap:     18440184    2503020   15937164
331.106 Swap:     18440184    2502936   15937248

ブロック:20秒。スワップに2200MBを追加:

751.283 Swap:     18440184     885288   17554896
752.286 Swap:     18440184     911676   17528508
772.331 Swap:     18440184    3193532   15246652
773.333 Swap:     18440184    1404540   17035644

ブロック済み:37秒。スワップに2400MBを追加:

904.068 Swap:     18440184     613108   17827076
905.072 Swap:     18440184     610368   17829816
942.424 Swap:     18440184    3014668   15425516
942.610 Swap:     18440184    2073580   16366604

それも十分に悪いですが、悪いことは、システムが時々数時間待ってからも完全に応答しないということです。これは交換の問題と関係があると思いますが、確信はありません。

私の最初の考えは、/proc/sys/vm/swappinessを60から0または100に調整して効果があるかどうかを確認することでした。 0は何の影響もありませんが、100は問題が頻繁に発生しないようにします。

このように長い間システムがブロックされるのを防ぐにはどうすればよいですか?

10MB未満であれば、1〜3GBを交換することを決めたのはなぜですか?

システムメッセージ:

$ uname -a
Linux aspire 3.8.0-32-generic #47-Ubuntu SMP Tue Oct 1 22:35:23 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

編集する:

私は24 GBを削除し、8 GBだけを試して問題が32 GBのRAMに起因するかどうかをテストしましたが、同じ動作を確認しました。

また、VirtualBoxにGNU/Linux Mint 15をインストールしてスワップ動作(停止しない)を再現することができました。

8GBノートパソコンでは問題を再現できません。上記のスクリプトは数時間完全に実行されます。数メガバイトを交換しますが、ギガバイト全体は交換しません。そのため、両方のシステムの/proc/sys/vm/*のすべての変数を比較しました。両方のシステムはまったく同じです。これにより、問題は他の場所にあると信じていました。ノートブックは別のカーネルを実行します。

Linux hk 3.2.0-55-generic #85-Ubuntu SMP Wed Oct 2 12:29:27 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

VMシステムの内容が3.2.0から3.8.0に変更された可能性がありますか?

答え1

スワップブロックデバイスでどのI / Oスケジューラを使用しているかを確認し、より良い結果を得るには変更してみてください。

http://andrux-and-me.blogspot.nl/2013/05/io-schedulers-and-performance.html

答え2

次のバージョンにアップグレードした後、問題は消えました。

Linux aspire 3.16.0-31-lowlatency #43~14.04.1-Ubuntu SMP PREEMPT Tue Mar 10 20:41:36 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

そのような点を考慮せずにこれカーネルのアップグレードで問題が修正されました。

関連情報