Estou tentando diagnosticar alguns segfaults aleatórios em um servidor sem cabeça e uma coisa que parece curiosa é que eles parecem acontecer apenas sob pressão de memória e meu tamanho de troca não ultrapassa 0.
Como forçar minha máquina a trocar para garantir que ela esteja funcionando corretamente?
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
momento dos segfaults? Uma mensagem sobreoom-killer
indicaria que seu sistema não possui memória virtual suficiente, o que pode significar que a troca não está sendo usada. Este é um servidor virtualizado (e de que tipo)?segfault at 54 ip b7619ba8 sp bf9c3380 error 4
eu estou pensando que é um problema de hardware que será difícil de rastrear. Este é um servidor físico com dois processadores Athlon MP 2000+ e 1,5 GB de RAM. Ele é executado de forma bastante estável, mas segfaults durante compilações.Respostas:
É este linux? Nesse caso, você pode tentar o seguinte:
E então use um programa que use muita memória RAM ou grave um aplicativo pequeno que consome memória RAM. O seguinte será feito (fonte: http://www.linuxatemyram.com/play.html ):
Eu adicionei o sono (1) para dar mais tempo para assistir aos processos, pois ele devora ram e swap. O assassino do OOM deve matar isso assim que você estiver sem memória RAM e SWAP para dar ao programa. Você pode compilá-lo com
onde filename.c é o arquivo em que você salva o programa acima. Em seguida, você pode executá-lo com ./memeater.
Eu não faria isso em uma máquina de produção.
fonte
/proc/self/oom_score_adj
para garantir que ele é o mais provável vítima OOM-killer ...<unistd.h>
para dormir, caso contrário, ele lança um avisowarning: implicit declaration of function ‘sleep’;