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


23

私はヘッドレスサーバーでランダムなセグメンテーションフォールトを診断しようとしていますが、奇妙なことの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

kern.logセグメンテーション違反の時点で何かメッセージがありますか?oom-killerシステムに関する仮想メモリが不足していることを示すメッセージは、スワップが使用されていないことを意味します。これは仮想化されたサーバーですか?
ジル「SO-悪であるのをやめる」

segfault at 54 ip b7619ba8 sp bf9c3380 error 4私はそれが追跡するのが苦痛になるだろうハードウェアの問題だと思っているようなものだけでログにoom-killerエントリはありません。これは、デュアルAthlon MP 2000+プロセッサと1.5GBのRAMを備えた物理サーバーです。かなり安定して実行されますが、コンパイル中にセグメンテーション違反が発生します。
ジョスフェリー

1
さて、ケースのファンが接続されておらず、サーバーが過熱するプロセッサー集中処理を開始すると問題が発生することが判明しました。
ジョスフェリー

回答:


30

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

# sysctl vm.swappiness=100

そして、大量のRAMを使用するプログラムを使用するか、RAMを使い果たす小さなアプリケーションを作成します。以下がそれを行います(ソース:http : //www.linuxatemyram.com/play.html):

#include <stdlib.h>
#include <stdio.h>
#include <string.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, 0, 1024*1024);
        mb++;
        printf("Allocated %d MB\n", mb);
        sleep(1);
    }      
return 0;
}

ラムとスワップを使い果たすプロセスを見る時間をもっと与えるために、sleep(1)を追加しました。プログラムに与えるRAMとSWAPがなくなったら、OOMキラーはこれを強制終了します。あなたはそれをコンパイルすることができます

gcc filename.c -o memeater

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

実稼働マシンではこれを行いません。


おかげで、メモリを飲み込んでスワップを開始するのにうまくいきました。私のセグメンテーション違反は他の何かによって引き起こされていると思います...おそらくハードウェア:/
joshperry

Linuxの場合、に書き込むことによって開始することが役に立つかもしれない/proc/self/oom_score_adj...それが最も可能性の高いOOMキラーの被害者であることを保証するために
ゲルトバンデンベルグ

2
<unistd.h>睡眠を含める必要がある、そうでなければ警告がスローされますwarning: implicit declaration of function ‘sleep’;
デバンジャンバス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.