У меня есть ноутбук Debian (Buster) с 8 ГБ оперативной памяти и 16 ГБ подкачки. Я выполняю очень долгое задание. Это означает, что мой ноутбук оставался включенным последние шесть дней, пока он работает.
При этом мне периодически нужно использовать свой ноутбук как ноутбук. Это не должно быть проблемой; долгосрочное задание связано с вводом / выводом, работает через что-то на жестком диске USB и не занимает много ОЗУ (<200 МБ) или ЦП (<4%).
Проблема в том, что когда я вернусь к своему ноутбуку через несколько часов, он будет очень вялым и может занять 30 минут, чтобы вернуться в нормальное состояние. Это настолько плохо, что краш-мониторы помечают свои приложения как замороженные (особенно окна браузера), и все начинает некорректно падать.
Если посмотреть на системный монитор, то из 2,5 ГБ, используемых примерно наполовину, происходит свопинг. Я подтвердил, что это проблема, удалив пространство подкачки ( swapoff /dev/sda8
). Если я оставлю это без пространства подкачки, оно вернется к жизни почти мгновенно, даже через 24 часа. Со свопом это практически кирпич за первые пять минут, оставленный всего на шесть часов. Я подтвердил, что использование памяти никогда не превышает 3 ГБ, даже когда я в отъезде.
Я попытался уменьшить swappiness ( см. Также: Википедия ) до значений 10
и 0
, но проблема все еще сохраняется. Похоже, что после дня бездействия ядро считает, что весь графический интерфейс больше не нужен, и стирает его из оперативной памяти (подменяет его на диск). Долгосрочная задача - чтение огромного файлового дерева и чтение каждого файла. Так что ядро может запутаться, думая, что кеширование поможет. Но на одном жестком диске объемом 2 ТБ USB HD с ~ 1 млрд. Имен файлов дополнительная ГБ ОЗУ не сильно повысит производительность. Это дешевый ноутбук с вялым жестким диском. Он просто не может загрузить данные обратно в оперативную память достаточно быстро.
Как я могу сказать Linux использовать пространство подкачки только в чрезвычайной ситуации? Я не хочу бежать без свопа. Если происходит что-то неожиданное, и ОС внезапно требуется несколько дополнительных ГБ, тогда я не хочу, чтобы задачи убивались, и предпочел бы начать использовать swap. Но в данный момент, если я оставлю swap включенным, мой ноутбук просто не сможет быть использован, когда мне это нужно.
Точное определение «чрезвычайной ситуации» может быть предметом споров. Но чтобы уточнить, что я имею в виду: аварийная ситуация может возникнуть, когда система останется без какой-либо другой опции, кроме как поменять или убить процессы.
Что такое чрезвычайная ситуация? - Тебе правда нужно спросить? ... Надеюсь, ты никогда не окажешься в горящем здании!
Я не могу определить все, что может представлять собой чрезвычайную ситуацию в этом вопросе. Но, например, чрезвычайной ситуацией может быть ситуация, когда ядро настолько загружено для памяти, что оно начинает уничтожать процессы с помощью OOM Killer . Чрезвычайная ситуация НЕ возникает, когда ядро считает, что оно может улучшить производительность с помощью свопинга.
Окончательное редактирование: я принял ответ, который делает именно то, что я просил на уровне операционной системы. Будущие читатели также должны принять к сведению ответы, предлагающие решения на уровне приложений.