Przyglądałem się pamięci zbytnio w Linuksie /proc/sys/vm/overcommit_memory
i przeczytałem kilka artykułów, które nie mówią tego samego.
Ten dokument , pod nagłówkiem „Idąc w złym kierunku”, mówi dalej: „wartości 1: wykonaj overcommit, a 0 (domyślnie): nie”, ale w następnych kilku wierszach wspomina o podobnych rzeczy, że tak naprawdę nie jest to prawdą, a 0 oznacza „zgadnij, ile rozsądnego zaangażowania jest uzasadnione”. Oznacza to, że nadpisywanie pamięci nie jest wyłączone przy użyciu wartości 0, prawda?
Mówi także, że 1 oznacza „nigdy nie odmawiaj żadnego malloc ()”, a 2 oznacza „bądź precyzyjny w kwestii nadkomitowania - nigdy nie przydzielaj wirtualnej przestrzeni adresowej większej niż przestrzeń wymiany plus ułamek wartości nadmiernej komendy pamięci fizycznej”.
Z drugiej strony magazyn Red Hat stwierdza: „jeśli wartość wynosi 0, jądro sprawdza, czy jest wystarczająca ilość wolnej pamięci, aby przyznać żądanie pamięci wywołaniu malloc z aplikacji. Jeśli jest wystarczająca ilość pamięci, wówczas żądanie zostało zaakceptowane. W przeciwnym razie zostanie odrzucone, a do aplikacji zostanie zwrócony kod błędu. ” To brzmi dokładnie jak wyłączenie overcommit.
„Jeśli wartość jest ustawiona na 1, jądro przyznaje przydziały powyżej ilości fizycznej pamięci RAM i zamienia w systemie zgodnie z definicją wartości overcommit_ratio .... Jeśli ustawienie w tym pliku wynosi 2, jądro zezwala na wszystkie przydziały pamięci , niezależnie od bieżącego stanu alokacji pamięci. ” Pod względem wartości 1 i 2 jest to przeciwieństwo tego, co powiedział poprzedni dokument, prawda?
Czy ktoś wie, co jest rzeczywiście poprawne i czy można „wyłączyć” nadmierne zaangażowanie?
Odpowiedzi:
W magazynie Red Hat 1 i 2 zostały odwrócone. Uważaj na błędy, które mogą uniemożliwić wyłączenie nadmiernego zobowiązania do działania w taki sposób: https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/345601
źródło