Создание системного кэша для заполнения tar

Моя ситуация довольно проста: я сделал резервную копию некоторых своих документов и поместил их на NAS, и, поскольку я предпочел перенести один большой файл вместо миллионов маленьких, я создал tar

tar cf backup/2013-07-12-pictures.tar Pictures

Мой каталог Pictures содержит около 12 ГБ данных, и в результате мой кэш постоянно заполняется. Если я заархивирую еще несколько файлов (например, мои проекты, что угодно), это не займет много времени, и все мои 32 ГБ ОЗУ будут использованы:

sheldor:~$ free -g
             total       used       free     shared    buffers     cached
Mem:            31         31          0          0          0         27
-/+ buffers/cache:          2         28
Swap:           29          0         29

На данный момент, хотя мышь и система в целом ответственна, запуск программ (считывание с диска) занимает много времени. Буквально в возрасте: у меня есть SSD и запуск Chrome, который обычно занимает около 2 минут.

Теперь вы найдете все эти посты в интернете о том, что плохо очищать кеш и так далее. Здесь, на Спросите Ubuntu , вы тоже найдете такой пост , который спас мне жизнь, предоставив команду

sudo sync && sudo sysctl -w vm.drop_caches=3

Если вы прочитали комментарии, вы найдете для Пример этого здесь:

Это не проблема, так работает кеш страниц. Он будет сохранять данные в кеше как можно дольше, , но автоматически освобождает элементы, когда увеличивается нагрузка на память от других приложений. Очистка вручную не требуется. - Цезий 22 ноября 2011 года в 16:08

Что? Моя система (Intel Core i7 3,50 ГГц × 8, 32 ГБ оперативной памяти, NVidia Gtx 590) была заморожена после простого tar. Я имею в виду, какое давление я должен оказать, прежде чем мой кэш будет освобожден автоматически?

Вопрос: Есть ли способ настроить параметры, чтобы мой кэш очищался чаще? Или мне просто с этим жить?

3
задан 13 April 2017 в 15:25

3 ответа

Я согласен, что обработка кеша в Linux далека от оптимальной. Фактически, во многих отношениях Linux все еще чувствует себя более оптимизированным для использования на сервере / рабочей станции, чем на рабочем столе. См. этот Q & amp; A для аналогичной проблемы с планированием CPU / IO.

С учетом сказанного, есть решения, которые могут облегчить проблему. Вы можете вручную очистить кеш или настроить cronjob, как указано в user197590 . Другой способ - отключить генерацию кэша для определенных приложений. Вы можете сделать это с помощью утилиты nocache . На данный момент он доступен только в репозиториях 13.10 , но я смог установить пакет Saucy 12.04 без каких-либо проблем.

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

nocache tar cf backup/2013-07-12-pictures.tar Pictures

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

0
ответ дан 13 April 2017 в 15:25

Вы можете вручную освободить кеш памяти с помощью следующей простой команды:

sk@sk:~$ sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"

Однако, если вы хотите заставить ОС Linux очищать кеш памяти через определенный интервал, просто добавьте команду на работу. Здесь я покажу вам, как.

Откройте свой терминал и введите следующую команду, чтобы создать файл с именем cacheclear.sh. Например, я создаю файл cacheclear.sh в моей директории / home:

sk@sk:~$ sudo vi /home/cacheclear.sh

Добавьте в файл cacheclear.sh следующие строки:

#!/bin/sh 
sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"

Сохраните и выйдите из файла. Теперь добавьте этот файл в корневой каталог:

sk@sk:~$ sudo crontab -e

Эта команда открывает корневой каталог.

Добавьте в конец следующую строку:

0 * * * * /home/cacheclear.sh

Сохраните и выйдите из файла. Когда вы закончите, задание cron будет запускать эту команду каждый час и очищать кэш системной памяти.

0
ответ дан 13 April 2017 в 15:25

Использование предварительной выборки памяти deamon, такой как preload , является наилучшим возможным решением, которое я нашел. Он выполняет те же функции, что и механизм предварительной выборки в Windows.

С сайта предварительной загрузки :

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

Предварительная загрузка наверняка в репо по умолчанию 12.04, так что

sudo apt-get install preload

И все. Preload узнает, какие приложения вы используете, и позаботится о том, чтобы заполнить кеш нужными файлами.

Я использовал его на HDD и SSD ПК с отличным эффектом.

0
ответ дан 13 April 2017 в 15:25

Другие вопросы по тегам:

Похожие вопросы: