Начиная с Linux ядра 2.6.16 появилась возможность принудительной очистки системных кэшей:Чистим pagecache:
echo 1 > /proc/sys/vm/drop_cachesЧистим dentrie и inode кэши:
echo 2 > /proc/sys/vm/drop_cachesЧистим pagecache, dentrie и inode кэши:
echo 3 > /proc/sys/vm/drop_cachesПосле выполнения операции необходимо запустить команду sync
URL: http://linux-mm.org/Drop_Caches
Обсуждается: http://www.opennet.me/tips/info/1455.shtml
Полезная фича для бенчмарков файловых систем. А ещё для чего-нибудь может пригодиться?
>Полезная фича для бенчмарков файловых систем. А ещё для чего-нибудь может пригодиться?Например, иногда для выполнения программы нужно сразу много памяти и очень соблазнительно взять ее из дискового кэша который до метров двухсот вырос. Мгновенно он не уменьшится, только через некоторое время, а нужно прямо сейчас иначе предстоит долгое наблюдение за своппингом.
Не замечал подобных явлений.
Вот например, свободной памяти почти нет, большой дисковый кеш. В свопе пусто. Запускаю толстую прогу. Кеш сразу уменьшается, прога умещается в оперативку, своп по-прежнему пустой. "Что я делаю не так?" :)
Вообще, по личным наблюдениям, дисковый кеш можно считать свободной памятью. Потому что прежде, чем лезть в своп, система пожертвует кешем.
Может, если vm.swappiness поставить побольше... но зачем это делать?
под FreeBSD есть вариант?
Ну как же, дефрагментатор памяти можно написать, и продавать ;)
Уважаемый автор!
Когда пишите документ - указывайте ссылки!
В http://linux.die.net/man/5/proc написано совершенно обратное. sync надо выполнять *до* echo!!!
Автор так и писал:
>Автор так и писал:Зависит от того, по какому URL вы это читаете :)
http://www.opennet.me/tips/info/1455.shtml
>Перед выполнением операции необходимо запустить команду sync
http://www.opennet.me/openforum/vsluhforumID3/38369.html#3
>После выполнения операции необходимо запустить команду sync
>Уважаемый автор!
>Когда пишите документ - указывайте ссылки!
>В http://linux.die.net/man/5/proc написано совершенно обратное. sync надо выполнять *до* echo!!!В самом деле sync вообще не обязательно делать, просто если сделать до echo , то после echo могжет очиститься ещё и кэш с незаписанными на диск данными.
> после echo могжет очиститься ещё и кэш с незаписанными на диск данными.НЕ может.
cache ≠ buffer
Буферы записи не затрагиваются записью любого значения [1|2|3] в drop_caches, т.к. память эта относится к «dirty objects». В документации ядра про sync написано лишь затем, чтобы администратор системы получил максимальный эффект от выполненной операции.
Что будет с sync: «dirty objects» → «clean objects» → «drop caches» → «free memory»
Что будет без sync: «dirty objects» → «drop caches» → «free memory» + «dirty objects»
Т.е. без sync буферы продолжат существовать нетронутыми пока до них не дойдёт очередь в потоке ядра pdflush. Когда данные будут записаны на диск, тогда станет возможной их очистка из памяти, а sync просто принуждает записать на диск «прямо сейчас». Причём, sync нужно запускать дважды, по-хорошему.
Будет максимальное высвобождение памяти от последовательности команд:
sync && sync && echo 3 > /proc/sys/vm/drop_caches
Как-то так.
Как проверить, что это сработало?
Комманда free, колонка cached. Запустить до и после, чтобу прочувствовать разницу.
а как в FreeBSD?
sysctl -w vm.drop_caches=65535
Уважаемый АВТОР, искренне выражаю Вам свою благодарность за данную статью, очень помогла.
very good :)
Спасибо огромное, теперь не придется перезагружать каждый раз сервер, а можно как-нибудь поставить ограничение кэша например на 512 мб?
> Начиная с Linux ядра 2.6.16 появилась возможность принудительной очистки системных кэшей:
> Чистим pagecache:
> echo 1 > /proc/sys/vm/drop_caches
> Чистим dentrie и inode кэши:
> echo 2 > /proc/sys/vm/drop_caches
> Чистим pagecache, dentrie и inode кэши:
> echo 3 > /proc/sys/vm/drop_caches
> После выполнения операции необходимо запустить команду sync
> URL: http://linux-mm.org/Drop_Caches
> Обсуждается: http://www.opennet.me/tips/info/1455.shtmlБольшое спасибо!
Автору СПАСИБО!!! Несколько лет искал эту инфу!
А зачем их чистить? Это же не мусор в памяти.
Память фактически свободна для процессов.
Понадобится, возьмет сколько надо.
для ситуёвин в которых нужен пустой кеш
По первой комманде выдаёт -
bash: /proc/sys/vm/drop_caches: Permission denied
Надо запускать от пользователя root
Подробно мозете написат?