Апр 292014
 

Понадобилось мне выгружать системный кэш inactive в ручную, ибо он сжирал всю оперативку окола 55гигов, и держал кэш долгое время окола недели.
Система такая у меня.

# uname -rsm
FreeBSD 10.0-STABLE amd64

Создаем такой файл.

# cat /root/free_inac.c
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char** argv)
{
        size_t s=15ULL*1024*1024*1024;
        void* p=malloc(s);
        memset(p, 0, s);
        free(p);
        return 0;
}

Подсказал
Тут мы указываем s байт (15G), забиваем нули в них, только после этого освободится реальные страницы памяти.
Так вот если во free уже есть 15G, то скрипт ничего не выделил, если нету, то то освободится реально 15Г оперативки.
После компелим.

# cc /root/free_inac.c -o bagas

После я добавил задачу по крону, каждые 12 часов скрипт срабатывает и освобождает до 14гиг свободного места.

0 */12 * * * /root/bagas

Вот и все.

  4 комментария to “FreeBSD 10 осовобождения системного кэша Inactive”

  1. а зачем для этого си использовать, mdconfig -t malloc одной строчкой добьется того же, или tail -f /dev/zero оставить ненадолго ;-)

  2. А на кой это нужно? Даже если система занимает под кэши всю память, по запросу приложений она будет освобождена.

    • Мне нужно было освобождать, ибо пока она освободится сама, долго времени проходит.
      Да и по запросу приложений она пока освободится, так что мне проще было так сделать, ибо система уходила в свап.

 Leave a Reply

(required)

(required)

42 Запросов к базе. 0,394 Генерации страницы, 36MB Использование памяти.
Вы зашли с IP: 54.198.108.19