Мой опыт последних лет при заполнении всей памяти и подкачке таков:
Windows и macOS говорят «о, давайте исправим это для вас», а затем предположительно увеличивают размер подкачки. Открытие, например, 30 вкладок YouTube на какое-то время замедляют работу, но я все еще могу использовать курсор, если хочу прервать процесс, и после этого остальная часть системы (не обязательно вызывающее нарушение приложение) реагирует почти так же, как всегда.
Ubuntu (21.04) говорит: «Извините, вы не можете взаимодействовать с компьютером в течение следующих десяти-тридцати минут». На том же оборудовании и в том же браузере я могу открыть 30 вкладок YouTube и посмотреть, как вся система заблокируется. Вся память и файл подкачки израсходованы, а курсор не просто работает медленно, но и фиксируется на месте. Я не могу осмысленно взаимодействовать с остальной системой.
Разница, похоже, в том, что Ubuntu никогда не разрешает ситуацию, поддерживает постоянный размер свопа и, следовательно, блокирует его каждые пять секунд, навсегда. То есть до тех пор, пока не произойдет катастрофический сбой и Firefox не исчезнет без следа - чего практически никогда не бывает в других ОС. Самым важным аспектом является то, что я не могу взаимодействовать с остальной системой.
Я не знаю, но у меня сложилось впечатление, что это не было бы проблемой, если бы размер свопа увеличивался в зависимости от спроса. Как это достигается? Можно ли как-то улучшить управление памятью?
После (не так быстро) выполнения быстрого теста, предложенного в комментариях, где я удвоил размер файла подкачки, я могу сделать вывод, что это имеет большое значение в мир. Система оставалась отзывчивой во время той же нагрузки. Я могу только сделать вывод, что адаптивный размер свопа решит описанную проблему.
$ free -h
total used free shared buff/cache available
Mem: 3.7Gi 3.1Gi 129Mi 374Mi 566Mi 105Mi
Swap: 4.0Gi 3.0Gi 988Mi
$ sysctl vm.swappiness
vm.swappiness = 60
$ swapon -s
Filename Type Size Used Priority
/swapfile_4G.img file 4194300 3180664 20
Одним из преимуществ Ubuntu (среди прочего) является получение постоянной поддержки и увеличение срока службы старого оборудования, в том числе машин с объемом памяти ниже среднего. Не абсурдно маленький объем памяти, о чем свидетельствует тот факт, что другие операционные системы могут справиться отлично, просто меньше среднего. Многие из этих машин не подлежат обновлению.
4 ГБ ОЗУ подходят для большинства случаев использования . В Ubuntu, в Windows, в macOS. Однако кажется, что хорошо работает только в Windows и macOS, когда вы израсходуете все выделенное пространство подкачки.
Короче говоря, в тот же момент, когда решение для обеспечения нормальной работы Ubuntu становится «покупкой нового оборудования», весь смысл его запуска становится спорным для всех этих машин. Обновление оборудования выходит за рамки этого вопроса.
Как было упомянуто в комментарии @Terrance Swapspace - решение этой проблемы.
apt install swapspace
Теперь все, что вам нужно, чтобы контролировать вашу систему, - это немного бесплатного хранилища. Проверено и работает .
Ядро Linux ... сомнительно с точки зрения поддержки подкачки. Swap - это гражданин второго сорта с точки зрения многих разработчиков. Я имею в виду, что алгоритм, используемый для извлечения и извлечения страниц, довольно прост и может не работать, когда есть много часто используемых страниц.
Приличным решением, вероятно, было бы использование zswap. Это означает, что фрагмент памяти становится сжатой памятью, в которую выгружаются страницы. Для этого отредактируйте параметры загрузки ядра, добавив zswap.enabled = 1 zswap.compressor = lz4 zswap.max_pool_percent = 20 zswap.zpool = z3fold
. Самый простой способ сделать это в системе Ubuntu - добавить его в файл / etc / default / grub
как часть ключа GRUB_CMDLINE_LINUX_DEFAULT
. Это эффективно увеличит объем данных, которые могут храниться в ОЗУ, уменьшит количество операций ввода-вывода диска и предотвратит зависания.
Наконец, вы спрашиваете о динамическом создании дополнительного пространства подкачки. Linux полностью способен добавлять и удалять файлы подкачки по желанию, что означает, что сценарий может проверять доступность подкачки, а затем, при необходимости, добавлять файлы подкачки.Однако в этом нет особого смысла, если вы очень часто используете все пространство подкачки.
Чтобы увеличить пространство подкачки (без перераспределения диска), вы можете использовать файл подкачки. Для этого запустите sudo dd if = / dev / zero of = / swapfile count = 1M bs = 1024 status = progress
, который копирует 1 миллион блоков по 1024 байта (т. Е. 1 гигабайт) в файл. . Затем запустите sudo chmod 0600 / swapfile
и sudo mkswap / swapfile
, чтобы подготовить файл для использования в качестве подкачки. Добавьте его в / etc / fstab, чтобы он всегда был доступен, добавив в этот файл следующую строку: / swapfile swap swap defaults 0 0
. Чтобы завершить процесс, вызовите sudo swapon -a
, который активирует файл подкачки.
Источник: Я сам использую файлы подкачки и zswap, а для команд ссылался на мой bash_histroy и вики Arch.