Назад | Перейти на главную страницу

Удаление кэшированной памяти во FreeBSD

Я использую сервер FreeNAS, который построен на версии ОС FreeBSD 8.2-RELEASE-p6. Я использую файловую систему ZFS с жестким диском 13 ТБ на моем физическом блоке с установленной памятью 8 ГБ. Он почти использует всю установленную оперативную память при обработке некоторого запроса. Тем не менее, он по-прежнему использует тот же объем памяти во время простоя. Так что иногда это становится проблемой.

На моем веб-сервере centos; Я использую следующую команду, чтобы удалить кешированную память с помощью cronjob;

sync; echo 3 > /proc/sys/vm/drop_caches

Однако эта команда не работает на моем сервере Freenas. Как я могу удалить кэшированную память на моем компьютере FreeNAS, который построен на FreeBSD 8.2

Спасибо

Для начала, CentOS - это операционная система Linux. Linux полностью отличается от FreeBSD.

Вам действительно не нужно освобождать эту кешированную память, вероятно, вам не нужно в вашем Cent-боксе, но это немного зависит от того, что вы на нем используете. Вам следует связываться с управлением памятью только тогда, когда у вас есть для этого действительно конкретная и веская причина.

Единственная причина, по которой вы захотите сделать это в производственном блоке, - это то, что у вас есть приложение, которое использует собственную память в зависимости от объема свободной памяти. Я не знаю программ * nix, которые это делают, но, возможно, они есть. Даже в этом случае вы должны использовать интеллектуальное ограничение памяти для системных кешей, а не очищать их вручную или периодически.

Единственная другая распространенная причина для очистки кешей - это тестирование и тестирование.

Если один из двух вышеупомянутых не подходит, не промывайте кеши.

Обновить:
В дополнение к комментариям ниже, позвольте мне подробно рассказать о разнице в производительности с помощью простого теста.

dd if = / dev / zero of = / path / to / test.1g bs = 1m count = 1024
1073741824 байт передано за 20,998713 сек (51133697 байт / сек)

dd if = / path / to / test.1g of = / dev / null bs = 1m
1073741824 байта передано в 4.496601 сек (238789654 байт / сек)

dd if = / path / to / test.1g of = / dev / null bs = 1m
1073741824 байта передано в 1.071374 с (1002210138 байт / сек)

При первом чтении тестового файла ничего не кэшировалось; во второй раз он уже был в кеше, поэтому операция чтения завершилась в четыре раза быстрее. На типичном сервере 90% операций чтения приходится на 1% файлов / данных на диске. Если большая часть этого 1% может оставаться в кэшированной памяти, чтение с дисков обычно будет в 4 раза быстрее (по крайней мере, на моем сервере).

Для тех, кому нужно удалить кеш для целей тестирования, похоже, что нет прямого способа сбросить кеш во FreeBSD.

Обычно кеш ОС - это кеш файлов файловой системы (или mmaped файлы). Кэш этих файлов можно очистить, отключив соответствующий раздел.

Источник: http://unix.derkeiler.com/Mailing-Lists/FreeBSD/hackers/2010-03/msg00244.html

Просто чтобы прояснить размонтировать решение: попытка размонтировать файловую систему очищает и очищает кеш для этой файловой системы, даже если само размонтирование делает НЕ должны добиться успеха.

cd /mnt
umount /mnt

В umount воля потерпеть поражение поскольку текущий рабочий каталог занят, но любые кэшированные данные из /mnt в любом случае очищен.

Пример:

root:/usr/home/user> dd if=test of=/dev/null bs=1048576 count=1000
1048576000 bytes transferred in 10.012924 secs (104722255 bytes/sec)

root:/usr/home/user> dd if=test of=/dev/null bs=1048576 count=1000
1048576000 bytes transferred in 0.290137 secs (3614071699 bytes/sec)

root:/usr/home/user> umount /usr
umount: unmount of /usr failed: Device busy

root:/usr/home/user> dd if=test of=/dev/null bs=1048576 count=1000
1048576000 bytes transferred in 10.149973 secs (103308253 bytes/sec)