Вчера я копировал один файл объемом 8 ГБ на USB с медленной скоростью записи 7 МБ / с, а объем оперативной памяти составляет 3 ГБ. Во время копирования система застыла до такой степени, что я даже не мог переместить курсор.
Мне удалось войти в текстовую консоль и запустить iotop
, это показало, что процесс с именем kswapd0
занимал 99,99% ввода-вывода.
Существуют ли обходные пути, поэтому копирование большого файла не делает мою систему непригодной для использования?
Согласно этому сообщению об ошибке я решил эту проблему, добавив следующие строки
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
в /etc/sysctl.conf
и запустив
sudo sysctl -p
Я столкнулся с подобной проблемой. Мой 64-битный Ubuntu 14.04. Так что после долгой борьбы я нашел ответ , который решает мою проблему. Для простоты использования я добавил нижеприведенные команды в вышеупомянутом ответе . Проверьте ответ для подробного объяснения.
echo $((16*1024*1024)) > /proc/sys/vm/dirty_background_bytes
echo $((48*1024*1024)) > /proc/sys/vm/dirty_bytes
После использования вышеперечисленных команд система начала нормально работать при копировании файлов.
Благодарность идет к @Rmano .
У меня возникла похожая проблема с зависанием системы при копировании на флешку. Я сообщил об ошибке об этом: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1267648
В качестве обходного пути я обнаружил, что отключение свопа полностью исключает эта проблема.
Да, есть настройки ядра, которые вы можете настроить, указав, сколько данных должно быть помечено как записанное, прежде чем оно действительно будет записано на диск. Посмотрите здесь для довольно полного их описания. В частности, вы захотите найти значение dirty_ratio, которое подходит вам (обычно оно слишком велико для настольных компьютеров / ноутбуков по умолчанию, но не существует единого магического числа, подходящего для всех).
У меня были похожие проблемы при копировании файлов на диск exfat
. У меня было меньше проблем с использованием файловой системы ext4
на жестком диске USB.
У меня только что была точно та же проблема (в 2019), на человечности 19.10, при копировании большого количества файлов от диска USB до диска SATA. Обе файловых системы являются ext4. Когда я выключил подкачку, проблема исчезла. Это похоже на некоторую ошибку в выделении памяти для дисковых буферов - по-видимому, ядро пытается выделить как можно больше памяти для дисковых буферов, в такой ситуации, которая не имеет смысла (делающий дисковые буферы в подкачке...), или это просто неправильно вычисляет емкость памяти, чем можно использовать для кэширования...
в Ubuntu 19.10 эта проблема возникает из-за проблема с управлением свопами. Работа с dirty_background сломала мой файловый проводник nautilus. Наряду с зависанием при копировании больших файлов я столкнулся с несколькими проблемами производительности из-за плохого управления свопами в 19.10. Так как полностью отключать подкачку не рекомендуется, и мы можем контролировать степень записи в раздел подкачки, установив подкачку.
swappiness = 0 указывает ядру избегать подкачки процессов из физической памяти как можно дольше. swappiness = 100 указывает ядру агрессивно выгружать процессы из физической памяти и перемещать их в кеш подкачки
, поэтому мы собираемся установить swappiness = 1.
Чтобы изменить значение подкачки Временное изменение (теряется при перезагрузке) со значением подкачки 1 может быть выполнено с помощью
sudo sysctl vm.swappiness = 1
Чтобы сделать изменение постоянным, отредактируйте файл конфигурации с помощью ваш любимый редактор:
sudo gedit /etc/sysctl.conf
Найдите vm.swappiness и измените его значение по желанию. Если vm.swappiness не существует, добавьте его в конец файла следующим образом:
vm.swappiness = 1
Сохраните файл и перезагрузитесь.
Это помогло мне улучшить общие проблемы с производительностью в Ubuntu 19.10, в то время как отключение подкачки полностью устранило все проблемы с производительностью, которые у меня были с 19.10, но все же я не рекомендую делать это в обычных ситуациях .
В качестве эксперимента я установил sysctl.conf на:
vm.dirty_background_ratio=1
vm.dirty_ratio=2
, и это решило проблему. Предыдущие значения 5/10 не помогли. Похоже, всем стоит поиграться с этими параметрами, чтобы найти лучший. Копирование файла размером 12 ГБ с SSD на флэш-накопитель заняло около 15 минут без зависаний системы (USB 2.0). Возможно, я проверю значения 2/4 и т. Д. После нескольких дней тестирования.
Система: Ubuntu 19.10, i7, 8 ГБ ОЗУ, SSD.
Отключение свопа во время копирования помогло мне.
sudo swapoff -a
После того, как копирование завершено, я включаю обмен
sudo swapon
Редактировать: обратите внимание, как упоминает Robby1212 в комментарии, что обмен опасен и должен быть выполнен после того, как вы опробовали другие ответы. Мне повезло, что со мной ничего не случилось, когда я переключился. Я отключаю только при копировании больших файлов.