OOM-Killer beendet Prozess, obwohl der Seitencache nie gelöscht wird

OOM-Killer beendet Prozess, obwohl der Seitencache nie gelöscht wird

Auf unseren Produktionsservern tritt unter Last manchmal das folgende Problem auf (Linux 4.10):

  1. Die Anwendung, die die Last verarbeitet (Webserver), läuft unter hoher Last.
  2. Ein neuer Job wird gestartet (z. B. cron). Dies erfordert einen Systemaufruf clone(), der jedoch keinen Speicher zuweist.
  3. Der Kernel-OOM-Killer wird gestartet und beendet einen der Anwendungsprozesse des Webservers, sodass der neue Job beginnen kann.
  4. „free -m“ zeigt, dass der freie Speicher kritisch niedrig ist, etwa 1-3 GB von den 64 GB auf dem Server. Der Großteil des Speichers befindet sich jedoch im Seitencache.
  5. Das System verfügt über keine Einrichtung für eine Swap-Partition/-Datei und vm.swappiness ist auf den Standardwert 60 eingestellt.

Wenn wir stattdessen vor dem Beginn des Ladens „echo 3 > /proc/sys/vm/drop_caches“ ausgeführt hätten, würde das OOM unsere Webserveranwendung nicht beenden und alles funktioniert einwandfrei.

Gibt der Kernel unter den oben genannten Bedingungen den Seitencache nicht frei, bevor er versucht, einen Prozess zu beenden, um Speicher freizugeben?

verwandte Informationen