11

Я изучал чрезмерное использование памяти в Linux с помощью /proc/sys/vm/overcommit_memory , и я прочитал несколько статей, в которых не говорится одно и то же.

Этот документ под заголовком "Движение в неправильном направлении", продолжает: «значения 1: делать overcommit и 0 (по умолчанию): не», но затем в следующих нескольких строках он упоминает среди аналогичных то, что это на самом деле не так, и что 0 означает «угадать, насколько чрезмерное обязательство разумно». Это означает, что переполнение памяти не отключается при использовании значения 0, верно?

В нем также говорится, что 1 означает «никогда не отказывать в любом malloc()», а 2 означает «быть точным в отношении чрезмерной передачи - никогда не фиксировать виртуальное адресное пространство, превышающее пространство подкачки плюс часть overcommit_ratio физической памяти».

Журнал Red Hat, с другой стороны, утверждает, что «если значение равно 0, то ядро проверяет, достаточно ли памяти для предоставления запроса памяти для вызова malloc из приложения. Если памяти достаточно, запрос удовлетворяется. В противном случае он отклоняется и код ошибки возвращается в приложение. " Это звучит так же, как отключение overcommit.

«Если значение установлено в 1, то ядро выделяет ресурсы, превышающие объем физической ОЗУ, и подкачку в системе, как это определено значением overcommit_ratio .... Если значение в этом файле равно 2, ядро разрешает все выделения памяти, независимо от текущего состояния выделения памяти. "С точки зрения значений 1 и 2, это противоположно тому, что сказал предыдущий документ, верно?

Кто-нибудь знает, что на самом деле правильно, и можно ли «отключить» сверхкоммит?

1 ответ1

8

В журнале Red Hat 1 и 2 поменялись местами. Остерегайтесь ошибок, которые могут помешать отключению чрезмерной передачи для работы, подобной этой: https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/345601

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .