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

tar использует слишком много памяти для своего буфера - временное решение?

я taring, а затем сжать кучу файлов и каталогов на моем Ubuntu Server VPS для резервного копирования. У него всего 1 ГБ ОЗУ и 128 МБ подкачки (я не могу добавить больше - OVH используют OpenVZ в качестве программного обеспечения для виртуализации), и каждый раз tar запускает, он использует тонну памяти для своего буфера, в результате чего все остальное выгружается - даже при использовании nice -n 10.

Есть ли способ заставить tar использовать небольшой буфер и уменьшить использование памяти? Меня беспокоит, что как только размер резервной копии станет определенного, мой сервер выйдет из строя, потому что tar не хватит памяти для его буфера.

Я использую bzip2 для сжатия, и я уже ограничил использование памяти с помощью -4 вариант.

Редактировать: Вот что htop похоже, когда у меня было tar работает какое-то время:

Вот ссылка на полную гифку

Изменить 2: Вот команда tar, которую я использую:

nice -n 20 tar --exclude "*node_modules*" --exclude "*.git/*" --exclude "/srv/www-mail/rainloop/v*"  -cf archive.tar /home /var/log /var/mail /srv /etc

На самом деле ваше изображение показывает как раз обратное.

Как вы можете видеть в столбце RES, tar потребление памяти довольно низкое. Вы используете RAM появиться увеличиваться просто потому, что Linux активно кэширует данные, прочитанные командой tar. Это, в свою очередь, вызывает нехватку памяти и обратную запись грязных страниц (в основном, система очищает свой кэш записи, чтобы приспособиться к большему кэшированию чтения) и, возможно, полезные данные удаляются из кеша ввода-вывода.

К сожалению, кажется, что tar сам по себе не может быть проинструктирован использовать O_DIRECT или POSIX_FADVISE (оба из которых могут использоваться для «обхода» кеша). Итак, используя tar здесь нет настоящего решения ...