Апр 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
Вот и все.
а зачем для этого си использовать, mdconfig -t malloc одной строчкой добьется того же, или tail -f /dev/zero оставить ненадолго ;-)
Хмм, не знал.
Попробую на досуге.
А на кой это нужно? Даже если система занимает под кэши всю память, по запросу приложений она будет освобождена.
Мне нужно было освобождать, ибо пока она освободится сама, долго времени проходит.
Да и по запросу приложений она пока освободится, так что мне проще было так сделать, ибо система уходила в свап.