Автоматическое управление подкачкой / памятью

Мой опыт последних лет при заполнении всей памяти и подкачке таков:

  • 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 становится «покупкой нового оборудования», весь смысл его запуска становится спорным для всех этих машин. Обновление оборудования выходит за рамки этого вопроса.

Требования для стандартной версии Ubuntu - 4 ГБ памяти.

0
задан 11 June 2021 в 19:18

2 ответа

Как было упомянуто в комментарии @Terrance Swapspace - решение этой проблемы.

apt install swapspace

Теперь все, что вам нужно, чтобы контролировать вашу систему, - это немного бесплатного хранилища. Проверено и работает .

0
ответ дан 28 July 2021 в 11:29

Ядро 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.

1
ответ дан 28 July 2021 в 11:29

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

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