Назад | Перейти на главную страницу

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

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

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

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

Как мне этого добиться?

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

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

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

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

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

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

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

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

echo 3 > /proc/sys/vm/drop_caches

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

Более подробную информацию можно найти по адресу: Управление памятью Linux - Drop Cache