Как проверить раздел подкачки


23

Я пытаюсь диагностировать некоторые случайные ошибки на автономном сервере, и одна вещь, которая кажется любопытной, заключается в том, что они происходят только под давлением памяти, и размер моего свопа не превысит 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время segfaults? Сообщение о oom-killerбудет означать, что вашей системе не хватает виртуальной памяти, что может означать, что подкачка не используется. Это виртуализированный сервер (и какой)?
Жиль "ТАК - перестать быть злым"

В журнале нет записей о убийцах, просто segfault at 54 ip b7619ba8 sp bf9c3380 error 4я думаю, что это аппаратная проблема, от которой будет трудно избавиться. Это физический сервер с двумя процессорами Athlon MP 2000+ и 1,5 ГБ оперативной памяти. Он работает довольно стабильно, но при ошибках компиляции.
Джошперри

1
Что ж, оказалось, что вентиляторы корпуса не были подключены, что вызывало проблемы, когда сервер начинал делать что-нибудь интенсивное с процессором, вызывая его перегрев.
Джошперри

Ответы:


30

Это Linux? Если это так, вы можете попробовать следующее:

# sysctl vm.swappiness=100

А затем либо используйте программу (ы), которая использует много оперативной памяти, либо напишите небольшое приложение, которое просто съедает оперативную память. Это будет делать следующее (источник: 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;
}

Я добавил режим сна (1), чтобы дать вам больше времени для наблюдения за процессами, которые сжигают оперативную память и меняются местами. Убийца OOM должен убить это, как только у вас не будет ОЗУ и SWAP, чтобы дать программе. Вы можете скомпилировать его с

gcc filename.c -o memeater

где filename.c - это файл, в котором вы сохраняете вышеуказанную программу. Затем вы можете запустить его с помощью ./memeater.

Я бы не стал делать это на производственной машине.


Спасибо, это сработало, чтобы сожрать память и начать обмен. Я полагаю, что мои segfaults вызваны чем-то другим ... вероятно, аппаратными средствами: /
joshperry

Для linux было бы полезно начать с письма, чтобы /proc/self/oom_score_adjубедиться, что это наиболее вероятная жертва OOM-убийцы ...
Герт ван ден Берг

2
нужно включить <unistd.h>для сна, иначе выдает предупреждениеwarning: implicit declaration of function ‘sleep’;
Дебанжан Басу
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.