Проверка работы OOM-Killer
Проверка работы OOM-Killer в Linux
Запустить нижеследующую программу, желательно в двух экземплярах (код на C):
#include <stdio.h> #include <stdlib.h> #define CR 13 int main(){ char *fptr; long i, k; i = 50000000000L; do{ if(( fptr = (char *)malloc(i)) == NULL){ i = i - 1000; } } while (( fptr == NULL) && (i > 0)); sleep(15); /* for time to observe */ for(k = 0; k < i; k++){ /* so that the memory really gets allocated and not just reserved */ fptr[k] = (char) (k & 255); } /* endfor */ sleep(600); /* O.K. now you have 1 minute */ free(fptr); /* clean up, if we get here */ return(0); }
Программа займет всю свободную память и будет ждать 10 минут пока не сработает OOM-killer.
Скомпилированный бинарник: a.out
Можно повысить вероятность прибивания процесса так:
echo "+15" > /proc/<PID>/oom_adj
Значение может быть от -17 (минимальная вероятность) до +15 (максимальная вероятность)
перед запуском хорошо бы выключить swap swapoff -a
Результат смотреть в syslog
или dmesg -T
Enjoy!