Was macht das System mit den restlichen 20 %?
Der Kernel verwendet den verbleibenden physischen Speicher für seine eigenen Zwecke (interne Strukturen, Tabellen, Puffer, Caches, was auch immer). Die Memory Overcommitment-Einstellung handhabt virtuelle Speicherreservierungen für Userland-Anwendungen, der Kernel verwendet keinen virtuellen Speicher, sondern einen physischen.
Warum ist dieser Parameter überhaupt erforderlich?
Der overcommit_ratio
Parameter ist eine Implementierungsauswahl, die verhindern soll, dass Anwendungen mehr virtuellen Speicher reservieren, als für sie in Zukunft vernünftigerweise verfügbar sein wird, d. h. wenn sie tatsächlich auf den Speicher zugreifen (oder es zumindest versuchen).
Einstellung overcommit_ratio
bis 50 % wurde von den Linux-Kernel-Entwicklern als angemessener Standardwert angesehen. Es wird davon ausgegangen, dass der Kernel niemals mehr als 50 % des physischen Arbeitsspeichers verwenden muss. Ihr Kilometerstand kann variieren, der Grund, warum es ein Tunable ist.
Warum sollte ich es nicht immer auf 100 % setzen?
Wenn Sie ihn auf 100 % (oder einen "zu hohen" Wert) setzen, wird Overcommitment nicht zuverlässig deaktiviert, da Sie nicht davon ausgehen können, dass der Kernel 0 % (oder zu wenig) RAM verwendet.
Es verhindert nicht, dass Anwendungen abstürzen, da der Kernel sowieso den gesamten physischen Speicher, den er benötigt, vorbelegt.
Wenn Sie das Verhältnis auf 100 % setzen, wird kein Speicherplatz für dateigestützte Seiten oder In-Kernel-Zuweisungen wie Kernel-Code, Netzwerkpuffer usw. reserviert.
Strukturen im Kernel werden trotzdem zugewiesen, was zu Overcommit führt. Sie sind im Allgemeinen individuell begrenzt (z. B. gibt es eine Einstellung für Netzwerkpuffer). Ich glaube nicht, dass es ein Gesamtlimit von 50 % gibt, obwohl ein Gesamtlimit etwas ist, an dem zum Zweck des Hostens von Containern gearbeitet wurde.
Auf dateigestützten Seiten führen Sie normalerweise Userspace-Code aus, also brauchen Sie auch dafür Platz.