web-dev-qa-db-ja.com

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

ヘッドレスサーバーでランダムなセグメンテーションフォールトを診断しようとしていますが、奇妙に思われるのは、それらはメモリの負荷がかかっている場合にのみ発生し、スワップサイズが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
23
joshperry

これはLinuxですか?もしそうなら、あなたは以下を試すことができます:

# sysctl vm.swappiness=100

そして、多くの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;
    char* buffer;

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

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

Linuxの仮想メモリマネージャは、実際にはRAM=を割り当てないように賢くなっている場合があるため、memset行を0ではなく1で初期化するようにコード化しました。私は、sleep(1)を追加してプロセスがramとswapを食い尽くすのを監視する時間を確保してください。RAMとSWAPがプログラムから外れると、OOMキラーはこれを強制終了します。

gcc filename.c -o memeater

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

私はこれをプロダクションマシンでは実行しません。

31
Steven D