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