Linux: Как мне явно поменять местами все возможное?

По сути, это противоположность « Linux: как явно отменить замену всего возможного? ».

Я хочу максимизировать объем доступной свободной памяти перед запуском процесса, который, как я знаю, будет интенсивно использовать системную память, и я не хочу, чтобы он приостанавливался на длительные периоды времени, пока ОС не поймет, что все else должен быть заменен.

Кроме того, я знаю, что у многих программ есть память, которую они используют только при инициализации и никогда больше не касаются.

Как мне это сделать?

Я пробовал выполняет sysctl vm.swappiness = 100 , но это почти ничего не меняет.

-1
задан 27 September 2017 в 19:19
2 ответа

Неиспользуемый код инициализации будет освобожден, как только память понадобится для других целей. (Он будет поддерживаться файлами, из которых он читается.)

Механизмы подкачки памяти в Linux хорошо спроектированы и проверены годами. В редких случаях вы захотите заменить какой-либо процесс из памяти. Это приведет к интенсивной подкачке страниц каждый раз, когда процесс подкачки запланирован для выполнения.

Если вам действительно нужна память от других приложений, у вас слишком мало памяти. Вы можете предотвратить выполнение других программ, отправив им сигнал STOP с командой kill . Будьте осторожны, какие программы вы останавливаете, иначе вы можете заблокировать себя в системе.

Если вы наблюдаете большие паузы во время запуска вашего процесса, подумайте об использовании sar , чтобы определить, где находится узкое место. Вы также можете использовать top , чтобы определить, какой процесс выгружается или сильно меняется местами. Не удивляйтесь, если ваш процесс окажется проблемой.

Я запускал серверы, на которых сильно не хватало памяти. Для выполнения стартапов необходимо было ограничить количество процессов, запускаемых одновременно. Процесс запускается практически мгновенно, даже если память слишком занята.

Если вы действительно хотите принудительно вывести из памяти все возможное, вы можете написать программу, которая выделяет желаемый объем памяти и непрерывно записывает каждую страницу выделенной памяти в течение нескольких циклов. Он испытает все проблемы, которых вы хотите избежать.

2
ответ дан 5 December 2019 в 19:12

Вы можете добиться того, чего пытаетесь достичь, отбросив кеши (pagecache, dentries и inodes).

echo 3 > /proc/sys/vm/drop_caches

очистит их все.

Дополнительную информацию можно найти по адресу: Linux Memory Management - Drop Caches

1
ответ дан 5 December 2019 в 19:12

Теги

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