Scroll to navigation

proc_sys_vm(5) File Formats Manual proc_sys_vm(5)

ИМЯ

/proc/sys/vm/ - virtual memory subsystem

ОПИСАНИЕ

/proc/sys/vm/
Этот каталог содержит файлы для тонкой настройки управления памятью, буферами и кэшем.
/proc/sys/vm/overcommit_kbytes (начиная с Linux 3.10)
В данном файле задаётся количество свободной памяти (в КиБ) в системе, которое должно быть зарезервировано для пользователей с мандатом CAP_SYS_ADMIN.
Значение по умолчанию равно минимум от [3% свободных страниц, 8МиБ], выраженное в КиБ. Этого достаточно для того, чтобы суперпользователь смог войти и удалить процесс, если нужно, когда система работает в режиме по умолчанию — «угадывание» перерасхода (т. е., 0 в /proc/sys/vm/overcommit_memory).
Для систем, работающих в режиме «без перерасхода» (overcommit never) (т. е., 2 в /proc/sys/vm/overcommit_memory) нужно увеличить значение в этом файле с учётом полного размера виртуальной памяти для программ, используемых при восстановлении (например, login(1) ssh(1) и top(1)). В противном случае суперпользователь не сможет войти для восстановления системы. Например, на x86-64 подходящим значением будет 131072 (резервируется 128 МиБ).
Изменение этого значения влияет на последующие запросы памяти приложениями.
/proc/sys/vm/compact_memory (начиная с Linux 2.6.35)
При записи в этот файл 1 все зоны уплотняются так, чтобы свободная память была непрерывными блоками насколько это возможно. Результат этого действия можно оценить по файлу /proc/buddyinfo.
Доступен только, если ядро собрано с параметром CONFIG_COMPACTION.
/proc/sys/vm/drop_caches (начиная с Linux 2.6.16)
Запись в этот файл заставляет ядро сбросить чистые кэши, dentries и индексные дескрипторы из памяти, тем самым освобождая её. Это может быть полезно для тестирования управления памятью и выполнения воспроизводимых тестов производительности файловой системы. Так как запись в этот файл вызывает потерю преимуществ кэширования, это может снизить производительность системы в целом.
Для освобождения страничного кэша (pagecache) используйте:

echo 1 > /proc/sys/vm/drop_caches
    

Для освобождения dentries и индексных дескрипторов используйте:

echo 2 > /proc/sys/vm/drop_caches
    

Для освобождения страничного кэша, dentries и индексных дескрипторов используйте:

echo 3 > /proc/sys/vm/drop_caches
    

Так как запись в этот файл — неразрушающая операция и изменившиеся (dirty) объекты не свободны, пользователь сначала должен запустить команду sync(1).
/proc/sys/vm/sysctl_hugetlb_shm_group (начиная с Linux 2.6.7)
This writable file contains a group ID that is allowed to allocate memory using huge pages. If a process has a filesystem group ID or any supplementary group ID that matches this group ID, then it can make huge-page allocations without holding the CAP_IPC_LOCK capability; see memfd_create(2), mmap(2), and shmget(2).
/proc/sys/vm/legacy_va_layout (начиная с Linux 2.6.9)
Если не равно нулю, то новая раскладка 32-битного отображения памяти выключается; ядро будет использовать старую (2.4) раскладку для всех процессов.
/proc/sys/vm/memory_failure_early_kill (начиная с Linux 2.6.32)
Управляет, как завершать процессы, когда неисправленная ошибка памяти (обычно, 2-битная ошибка в модуле памяти), которая не может быть обработана ядром, обнаружена в фоновом режиме аппаратным обеспечением. В некоторых случаях (например, когда страница имеет правильную копию на диске), ядро может может прозрачно исправить ошибку без влияния на приложения. Но если актуальной копии данных нет, то ядро завершит процесс, чтобы остановить распространение повреждения данных.
В файле содержатся следующие значения:
1
При обнаружении завершать все процессы, у которых есть повреждённые и не восстановимые с диска страницы. Заметим, что это поддерживается не для всех типов страниц, например для внутренних данных ядра или кэша подкачки, но работает для большинства пользовательских страниц.
0
Отключить отображение повреждённой страницы у всех процессов и завершать процессы, только если они пытаются к ней обратиться.
Такое завершение выполняется с использованием сигнала SIGBUS с установления значения si_code равным BUS_MCEERR_AO. Процессы могут обработать такую ситуацию, если захотят; подробней см. sigaction(2).
Это свойство активно только на архитектурах/платформах с дополнительными проверки и зависит от возможностей аппаратного обеспечения.
Приложения могут изменить настройку memory_failure_early_kill для себя с помощью операции PR_MCE_KILL вызова prctl(2).
Доступен только, если ядро собрано с параметром CONFIG_MEMORY_FAILURE.
/proc/sys/vm/memory_failure_recovery (начиная с Linux 2.6.32)
Включает восстановление отказов памяти (если поддерживается платформой).
1
Пытаться восстановить.
0
При отказе памяти всегда доводить до паники.
Доступен только, если ядро собрано с параметром CONFIG_MEMORY_FAILURE.
/proc/sys/vm/oom_dump_tasks (начиная с Linux 2.6.25)
Включает системный дамп задач (исключая ядерные нити), который создаётся когда ядро выполняет OOM-killing. Дамп включает следующую информацию по каждой задаче (нити, процессу): ID нити, реальный ID пользователя, ID группы нитей (ID процесса), размер виртуальной памяти, размер резидентной настройки, процессор, на котором работала задача, счётчик oom_adj (описание смотрите в /proc/pid/oom_adj) и имя команды. Эти данные полезны для определения того, почему был вызван OOM-killer и нахождения экземпляра задачи, его вызвавшего.
Если в файле содержится нулевое значение, то информация не выдаётся. На очень больших системах с тысячами задач дамп информации о состоянии памяти может быть неосуществим по каждой задаче. Системы не должны страдать от потери производительности из-за возникновения ситуаций с OOM, если такая информация ненужна.
Если задано ненулевое значение, то эта информация показывается в момент когда OOM-killer завершает захватившую память задачу.
Значение по умолчанию равно 0.
/proc/sys/vm/oom_kill_allocating_task (начиная с Linux 2.6.24)
Включает или выключает задачу завершения при OOM (исчерпание свободной памяти).
Если это значение равно нулю, то OOM-killer будет сканировать весь список задач и выбирать задачу для завершения на основе набора эвристических правил. Обычно выбирается задача, которая больше всех захватила памяти, что при её завершении позволит освободить огромное количество памяти.
Если это значение не равно нулю, то OOM-killer просто завершит задачу, из-за которой возникла ситуация нехватки памяти. Это позволяет избежать затратной операции сканирования списка задач.
Если /proc/sys/vm/panic_on_oom не равно нулю, то оно имеет приоритет над значением из /proc/sys/vm/oom_kill_allocating_task.
Значение по умолчанию равно 0.
/proc/sys/vm/overcommit_kbytes (начиная с Linux 3.14)
Данный, доступный на запись файл является альтернативой управлению CommitLimit через /proc/sys/vm/overcommit_ratio, когда /proc/sys/vm/overcommit_memory содержит значение 2. Это позволяет задать количество перерасходуемой памяти (memory overcommitting) абсолютным значением (в КБ), а не в виде процента, как это делается через overcommit_ratio. Это предоставляет более точный контроль CommitLimit в системах с очень большим объёмом памяти.
Может задействовать либо overcommit_kbytes, либо overcommit_ratio: если значение overcommit_kbytes не равно нулю, то оно используется для вычисления, в противном случае используется overcommit_ratio. Запись значения в один из этих файлов приводит к обнулению значения в другом файле.
/proc/sys/vm/overcommit_memory
Этот файл содержит значение режима учёта виртуальной памяти ядра. Значения:
0: эвристический перерасход (значение по умолчанию)
1: всегда разрешать перерасход, не проверять
2: всегда проверять, запретить перерасход
В режиме 0 вызов mmap(2) с MAP_NORESERVE не проверяется, и проверка по умолчанию очень поверхностная, что может привести к завершению процесса с помощью OOM-killer.
In mode 1, the kernel pretends there is always enough memory, until memory actually runs out. One use case for this mode is scientific computing applications that employ large sparse arrays. Before Linux 2.6.0, any nonzero value implies mode 1.
В режиме 2 (доступен начиная с Linux 2.6), общее виртуальное адресное пространство, которое можно выделить (CommitLimit в /proc/meminfo) вычисляется по формуле

CommitLimit = (total_RAM - total_huge_TLB) *
	      overcommit_ratio / 100 + total_swap
    

где:
total_RAM — общее количество физической памяти в системе;
total_huge_TLB — количество памяти без учёта огромных страниц;
overcommit_ratio — значение в /proc/sys/vm/overcommit_ratio; и
total_swap — размер пространства подкачки.
Например, в системе с 16 ГБ физической памяти, 16 ГБ подкачки, без выделения огромных страниц и с overcommit_ratio равным 50 по этой формуле значение CommitLimit равно 24 ГБ.
Начиная с Linux 3.14, если значение в /proc/sys/vm/overcommit_kbytes не равно нулю, то CommitLimit вычисляется так:

CommitLimit = overcommit_kbytes + total_swap
    

Также смотрите описание /proc/sys/vm/admin_reserve_kbytes и /proc/sys/vm/user_reserve_kbytes.
/proc/sys/vm/overcommit_ratio (начиная с Linux 2.6.0)
Доступный на запись файл содержит процент памяти, который может быть перерасходован (overcommitted). Значение по умолчанию равно 50. Смотрите описание /proc/sys/vm/overcommit_memory.
/proc/sys/vm/panic_on_oom (начиная с Linux 2.6.18)
Включает или отключает панику ядра при нехватке памяти.
Если значение равно 0, то ядерный OOM-killer завершит какой-нибудь вышедший из подчинения процесс. Обычно, OOM-killer способен завершить такой процесс и система продолжит работу.
Если значение в файле равно 1, то ядро, обычно, переходит в состояние паники при нехватке памяти. Однако, если процесс ограничен в выделении определённых элементов (nodes) согласно политике памяти (mbind(2) MPOL_BIND) или процессора (cpuset(7)) и предел таких элементов памяти был достигнут, то такой процесс может быть завершён OOM-killer. В этом случае состояние паники не возникнет, так как другие элементы памяти могут освободиться, что означает, что система в целом может не прийти к ситуации нехватки памяти.
Если значение в файле равно 2, то ядро всегда переходит в состояние паники, когда возникает нехватка памяти.
Значение по умолчанию равно 0. Значение 1 и 2 используются для отказоустойчивости кластеров. Выберите любое согласно вашей политике отказоустойчивости.
/proc/sys/vm/swappiness
Значение в этом файле определяет, насколько активно ядро будет вытеснять страницы в пространство подкачки. Большие значения увеличивают активность, меньшие значения сокращают активность. По умолчанию значение равно 60.
/proc/sys/vm/user_reserve_kbytes (начиная с Linux 3.10)
Задаёт количество памяти (в КиБ), которая резервируется под процессы пользователя. Предназначена для предотвращения запуска пользовательского процесса, который бы один съел всю память и это нельзя прекратить (завершить такой процесс). Это значение учитывается только, если значение в /proc/sys/vm/overcommit_memory равно 2 (режим «без перерасхода»). В этом случае система резервирует количество памяти, равное, минимум [3% от размера текущего процесса, user_reserve_kbytes].
Значение по умолчанию равно минимум [3% свободных страниц, 128 МиБ], выражается в КиБ.
Если значение в файле равно нулю, то пользователю разрешено выделять всю память под один процесс (за минусом резерва из /proc/sys/vm/admin_reserve_kbytes). Любая последующая попытка выполнить команду будет завершаться «fork: невозможно выделить память».
Изменение этого значения влияет на последующие запросы памяти приложениями.
/proc/sys/vm/unprivileged_userfaultfd (начиная с Linux 5.2)
This (writable) file exposes a flag that controls whether unprivileged processes are allowed to employ userfaultfd(2). If this file has the value 1, then unprivileged processes may use userfaultfd(2). If this file has the value 0, then only processes that have the CAP_SYS_PTRACE capability may employ userfaultfd(2). The default value in this file is 1.

СМОТРИТЕ ТАКЖЕ

proc(5), proc_sys(5)

ПЕРЕВОД

Русский перевод этой страницы руководства разработал Alexey, Azamat Hackimov <azamat.hackimov@gmail.com>, kogamatranslator49 <r.podarov@yandex.ru>, Darima Kogan <silverdk99@gmail.com>, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику по его адресу электронной почты или по адресу списка рассылки русских переводчиков.

2 мая 2024 г. Linux man-pages (unreleased)