Я изучал чрезмерное использование памяти в 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, это противоположно тому, что сказал предыдущий документ, верно?
Кто-нибудь знает, что на самом деле правильно, и можно ли «отключить» сверхкоммит?
Ответы:
В журнале Red Hat 1 и 2 поменялись местами. Остерегайтесь ошибок, которые могут помешать отключению чрезмерной передачи для работы, подобной этой: https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/345601
источник