スワップパーティションをテストする方法

スワップパーティションをテストする方法

ヘッドレスサーバーでランダムなセグフォルトを診断しようとしているのに奇妙に思われる1つの事実は、メモリ不足の状況でのみ発生するように見え、スワップサイズが0を超えないことです。

コンピュータが正常に動作していることを確認するために強制的に交換するにはどうすればよいですか?

orca ~ # free
             total       used       free     shared    buffers     cached
Mem:       1551140    1472392      78748          0     333920    1046368
-/+ buffers/cache:      92104    1459036
Swap:      1060280          0    1060280

orca ~ # swapon -s
Filename                                Type            Size    Used    Priority
/dev/sdb2                               partition       1060280 0       -1

ベストアンサー1

これはLinuxですか?その場合は、次のことを試すことができます。

# sysctl vm.swappiness=100

(デフォルトを確認するために最初にこれを使用したいかもしれません。sysctl vm.swappiness私のシステムでは10

次に、多くのRAMを使用するプログラムを使用するか、RAMのみを使用する小さなアプリケーションを作成します。以下はこれを行います(ソース:Linuxディスクキャッシュによる実験と楽しさ):

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include <unistd.h>


int main(int argc, char** argv) {
    int max = -1;
    int mb = 0;
    int multiplier = 1; // allocate 1 MB every time unit. Increase this to e.g.100 to allocate 100 MB every time unit.
    char* buffer;

    if(argc > 1)
        max = atoi(argv[1]);

    while((buffer=malloc(multiplier * 1024*1024)) != NULL && mb != max) {
        memset(buffer, 1, multiplier * 1024*1024);
        mb++;
        printf("Allocated %d MB\n", multiplier * mb);
        sleep(1); // time unit: 1 second
    }      
    return 0;
}

Linux仮想メモリマネージャは実際にRAMを割り当てないほどスマートであるため、ブロックをゼロではなく1に初期化するようにmemset行をコーディングします。メモリを消費してスワップする過程を見守る時間をさらに与えるために sleep(1) を追加しました。プログラムに提供する十分なRAMとSWAPがない場合、OOMキラーはプログラムを終了します。次のコマンドでコンパイルできます。

gcc filename.c -o memeater

ここで、filename.cは上記のプログラムを保存したファイルです。その後、./memeaterを使用して実行できます。

私は生産機械ではこれをしません。

おすすめ記事