Was ist zu tun, wenn auf den Webservern kein Swap-Speicherplatz mehr vorhanden ist?

8

Ich habe 2 LAMP-Webserver, denen routinemäßig der Swap-Speicherplatz ausgeht (siehe beigefügten oberen Screenshot).

Die Einstellungen von Apache sind wie folgt:

<IfModule prefork.c>
StartServer 64
MinSpareServer 64
MaxSpareServers 128
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4096
</ IfModule>

Die Ressourcenbeschränkungen für PHP sind:

max_execution_time = 30
max_input_time = 30
memory_limit = 80M

Ich bin neu in solchen Serveradministratoren (ich bin Entwickler). Was kann ich anpassen, um ein Tauschen zu verhindern?

Hier ist ein Screenshot von oben auf einem der Server beim Absturz: Bildschirmfoto

mmattax
quelle
1
Können Sie das Top nach Speichernutzung sortieren, damit klarer wird, was Speicherplatz beansprucht?
Carson
@carson, ich kann nicht, da das alles war, was ich hatte, als der Server abstürzte ...
mmattax

Antworten:

8

Ihnen geht der Swap aus, weil Sie Ihren gesamten Arbeitsspeicher und noch einige mehr verwenden. Sie haben ein ernstes Problem, das Sie sofort beheben müssen.

Sie haben zwei Möglichkeiten: Ignorieren Sie die Ursache und fügen Sie einfach mehr RAM hinzu, oder zielen Sie auf das Problem ab, was tatsächlich in Ihrem Speicher steckt.

Das Hinzufügen von RAM ist ziemlich billig und ziemlich einfach, wenn es sich um Ihren Server handelt, aber es handelt sich um eine vorübergehende Lösung, und wenn es sich um einen VPS- oder einen gemieteten Server handelt, ist es nicht so billig. Versuchen wir stattdessen, das Root-Problem zu beheben. Was saugt so viel Gedächtnis auf? Hier einige Tipps:

  • Deaktivieren Sie InnoDB (sofern Sie es nicht benötigen) in MySQL
  • Schlage Apache (und MySQL) mit dem Stick of Configuration +5
  • Betrachten Sie ein kleineres httpd wie cherokee, lighttpd oder nginx (sie sind sehr schnell und verbrauchen fast keinen RAM). Der Hauptnachteil ist, dass Sie keine .htaccessDateien verwenden können, aber deren Funktionalität fest codieren können.
  • Verwenden Sie einen OP-Code-Cache für PHP? Schalten Sie es aus oder wechseln Sie zu einem anderen, effizienteren.

Wenn Sie nur Swap-Elemente in den realen Arbeitsspeicher zurückbringen möchten, können Sie dies folgendermaßen tun:

swapoff -a && swapon -a

Aber versuchen Sie es dann nicht, wenn Sie weniger freien Speicher haben als Dinge im Tausch haben. Es wird Ihren Server zum Absturz bringen.

Oli
quelle
1
Vielen Dank für die Beispielkonfiguration, ich habe die Sparse / Spare-Apache-Prozesse heruntergefahren und das hat anscheinend geholfen!
mmattax
2

Für eine schnelle Änderung tun Sie:

"MaxRequestsPerChild 4096" auf so etwas wie: 700 wird helfen. Je länger ein Apache-Prozess dauert, desto mehr residenten Speicher wird er aufgrund von mod_php und dergleichen verbrauchen. Aktivieren Sie außerdem Keepalive und platzieren Sie aggressive Timeout-Einstellungen dafür:

KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 5

Auf diese Weise kann jede Client-Seitenanforderung einen Apache-Prozess verwenden, um alle Anforderungen zu verarbeiten, bei denen andernfalls mehrere Apache-Prozesse verwendet würden. Dadurch wird die Anzahl der zu einem bestimmten Zeitpunkt ausgeführten Apache-Prozesse verringert.

Für optimalen Speicher und Anforderungen pro Sekunde:

Entfernen Sie sich von mod_php und verwenden Sie stattdessen fastcgi oder einen anderen App-Server. Apache-Prozesse verbrauchen vernachlässigbar viel Speicher, wenn PHP-Seiten von FastCGI bereitgestellt werden. Ganz zu schweigen davon, dass fastcgi unter anderem Verbindungen zu Ihrem Datenbankserver aufrechterhalten kann.

Carpe Noctem
quelle
1

Wie wäre es mit einer Verlagerung der Bereitstellung statischer Inhalte auf einen besser geeigneten Server ?

pQd
quelle
Vielen Dank, aber ich suche nach einer kurzfristigen Lösung, um die Server stabil zu halten.
mmattax