Як перевірити swap розділ


23

Я намагаюся діагностувати деякі випадкові segfault на безголовому сервері, і одне, що здається цікавим, - це те, що вони здаються лише під тиском пам'яті, і розмір міняння не перевищить 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означатиме, що у вашій системі недостатньо віртуальної пам'яті, що може означати, що своп не використовується. Це віртуалізований сервер (і який вид)?
Жил "ТАК - перестань бути злим"

У журналі немає записів, які вбивають мертвих людей, такі речі, як, на segfault at 54 ip b7619ba8 sp bf9c3380 error 4мою думку, це апаратна проблема, яка буде болісно відстежувати. Це фізичний сервер з подвійними процесорами Athlon MP 2000+ та 1,5 Гб оперативної пам’яті. Вона працює досить стабільно, але під час компіляцій є сегментами.
joshperry

1
Ну, виявилося, що шанувальники корпусу не були підключені, що спричиняло проблеми, коли сервер почне робити щось інтенсивне процесором, що призведе до його перегріву.
joshperry

Відповіді:


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.

Я б не робив цього на виробничій машині.


Дякуємо, що добре працювало, щоб згорнути пам'ять і почати міняти місцями. Я думаю, що мої segfault спричинені чимось іншим ... напевно, обладнанням: /
joshperry

Для Linux може бути корисно почати з написання, щоб /proc/self/oom_score_adjпереконатися, що це найімовірніша жертва-вбивця OOM ...
Герт ван ден Берг

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