Вопрос: Linux: как явно отключить все возможное?


Я запустил что-то, что заняло много памяти, и теперь все очень много. Я предполагаю, что память всех приложений поменялась, чтобы освободить место для интенсивного процесса, и теперь все медленно возвращается в ОЗУ при доступе.

Есть ли способ явно перемещать все возможное из swap обратно в RAM? Или, может быть, не все, а только некоторые данные процессов?


53
2018-02-07 18:24


Источник


Я бы порекомендовал просто разрешить обычным операциям своп в том, что на самом деле нужно, а не вручную делать что-либо. - Douglas Leeder


Ответы:


Я бы рекомендовал разрешить обычную замену элемента управления оперативной памятью Linux в том, что на самом деле используется, поскольку они используются.

Единственное, что я могу придумать, - выключить swap, затем снова

sudo swapoff -a
sudo swapon -a

Это предполагает, что у вас достаточно запасной физической памяти, чтобы содержать все в свопе ...


53
2018-02-07 18:38



Он работает, очень медленно, хотя :) Спасибо! Но все же я считаю, что есть более элегантное решение :) - kolypto
Осторожно с этим решением, он будет принудительно вынимать все из подкачки ... если это не соответствует физической памяти, ядро ​​начнет смертельный убийца OOM. Я не знаю ничего хорошего, «попробуйте переместить все в ОЗУ, но не изящно, если не возможно». - Juliano
Я попробовал и выяснил, что он работает очень медленно. Таким образом, можно контролировать бесплатную ОЗУ и убивать swapoff если память будет низкой: в этом случае пространство подкачки останется функциональным :) - kolypto
Я не уверен, что убийство swapoff фактически остановит операцию. Зависит от того, как он реализован. - Douglas Leeder
@Juliano - Отсюда мое последнее предложение. Если на самом деле у вас недостаточно памяти, то убийца OOM доставит вас. - Douglas Leeder


Вы можете настроить его на эхо числа от 0 до 100 в /proc/sys/vm/swappiness,

Этот элемент управления используется для определения того, насколько агрессивно ядро ​​будет меняться   памяти. Более высокие значения повысят агрессивность, более низкие значения   уменьшить количество свопов, Значение 0 указывает ядру не на   инициировать своп до тех пор, пока количество бесплатных страниц и файлов с файлами не будет меньше   чем знак высокой воды в зоне.

Значение по умолчанию - 60.


11
2018-02-07 18:31



Не используйте / proc / sys напрямую, используйте sysctl вместо этого. В этом случае sysctl vm.swappiness=x, - Juliano
Я не думаю, что даже swappiness of zero приведет к тому, что страницы, которые уже заменены, будут явно внесены в основную память? - Douglas Leeder
@ Дуглас прав. vm.swappiness будет в основном контролировать решение о том, следует ли перемещать вещи для обмена или сокращения количества кешей и буферов, когда требуется память. - Juliano
@Juliano, почему бы не использовать / proc / sys? - James
@James Поскольку / proc / sys - это интерфейс нижнего уровня, используемый для изменения и запроса конфигурации ядра (это «деталь реализации»). Linux обеспечивает более высокий уровень sysctl команда для взаимодействия с пользователем. Конечный результат один и тот же, но обычно пользовательские интерфейсы более высокого уровня предпочтительнее для непосредственного взаимодействия пользователя. Подумайте, как запустить двигатель путем короткого замыкания проводов зажигания (нижнего уровня) вместо того, чтобы просто поворачивать ключ (более высокий уровень). - Juliano


Linux отлично справляется с управлением памятью, и вы не должны стоять на своем пути. Установка vm.swappiness (упомянутая ранее) не мешает. Вы, скорее всего, столкнетесь с нечетными проблемами, делающими что-то другим.

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


5
2018-02-08 03:25



В моем случае это было convert -density 200 file.pdf jpegs/file.jpg, По какой-то причине он использует много памяти, но вы правы: его можно настроить. Во всяком случае, ситуация возможна с любым приложением :) - kolypto
Я согласен с этим ответом - вы, вероятно, должны оставить обычные операции на машине, чтобы обменяться тем, что на самом деле необходимо. - Douglas Leeder
convert имеет -limit аргумент для управления его памятью и диском, и вы должны их прочитать. настройка -limit memory 512MB или подобное было бы хорошо. Было бы также полезно указать явный MAGICK_TEMPORARY_PATH и очистить его после завершения вашей команды. - slacy


Если у вас есть доступная память для всех ваших приложений, вполне нормально установить swappiness на 0, поэтому все не будет заменено. Например, qemu-kvm является большой мишенью для VMM, чтобы получить swapped, потому что он «кажется» неактивен большую часть времени. Я вижу, что до 80% памяти памяти qemu-kvm записывается для обмена. VM, работающие в qemu-kvm, станут почти не реагировать, потому что у них заканчивается своп (хотя гость понятия не имеет, что это происходит). Гость VM будет думать, что он играет превосходно, хотя, по правде говоря, он страшно тянет. Когда я кучу виртуальных машин «просыпаюсь» и начинаю делать что-то, он может увеличивать нагрузку до 30, даже на аппаратном уровне предприятия с достаточно быстрой памятью и диском. Я думаю, это провал в готовом дизайне qemu-kvm.

Надеюсь, это поможет кому-то.


3
2017-07-17 13:33





Если вы можете перезагрузить систему, которая должна это сделать (и может потребоваться гораздо меньше времени, чем при попытке любого другого решения).


1
2018-02-07 23:46





Чтобы скопировать часть моего ответа из этот вопрос,

Так что вы знаете, как работает перескакивание swappiness. Это работает, сообщая подсистеме VM, чтобы искать страницы для обмена, когда% памяти, отображаемой для обработки таблиц страниц + значение swappiness> 100. Таким образом, настройка 60 приведет к тому, что система начнет выходить из устаревших страниц из таблицы страниц процесса когда он использует более 40% памяти вашей системы. Если вы хотите, чтобы ваши программы использовали больше памяти за счет кеша, вы захотите снизить значение swappiness.


1
2018-02-08 04:23



Я не думаю, что проблема с программной памятью и кэшем - здесь я думаю, что это память приложений и неиспользуемая память. И я не думаю, что обман повлияет на это. - Douglas Leeder


Я бы посоветовал не пытаться выдумать подсистему VM в ядре. Чрезвычайно маловероятно, что на самом деле у вас достаточно информации для принятия правильных решений, чем это будет. И если вы заставите его как-то поступать неправильно, тогда вы просто закончите тем, что делаете еще медленнее.


1
2018-02-08 14:18



Есть некоторые случаи, когда я хочу делать то, что хочет OP. Если я случайно позволю процессу запускать бунт и заняться всей моей оперативной памятью + swap, то я могу либо ждать 15 секунд каждый раз, когда я переключаю приложения, чтобы его память выходила из-под свопа или просто заставляла его работать, и все работает так быстро, как обычно. - Alex
@Alex +1 для явного упоминания действительного варианта использования, который мы все имеем в нашем сознании. - Vortico