Speicherüberlauf: Schuldiger Dienst?

klodeckl

New Member
Hallo,

heute hatte ich einen Speicherüberlauf (laut Provider) auf meinem Root Server, wodurch ich dann nichtmal mehr per SSH zugreifen konnte (nur noch ein ping war möglich). Ich vermute es hängt mit MySQL zusammen. Die syslog habe ich studiert, leider steht da gar nichts dazu, normale Meldungen, dann auf einmal gar nichts mehr bis dass der Server neu gestartet wurde.

my.cnf:
Code:
table_cache            = 2000
table_definition_cache = 2000
open_files_limit = 6144
query_cache_limit	= 1M
query_cache_size        = 4M
key_buffer		= 16M
max_allowed_packet	= 16M
thread_stack		= 192K
thread_cache_size       = 8
Der Rest der my.cnf sollte Standard sein.

apache.conf:
Code:
Timeout 300
KeepAlive On
MaxKeepAliveRequests 50
KeepAliveTimeout 6
<IfModule mpm_prefork_module>
StartServers          3
MinSpareServers       3
MaxSpareServers      8
ServerLimit 512
MaxClients          512
MaxRequestsPerChild   0
</IfModule>
Der Rest ist wiederum Standard.

Bei Postfix wurde die maximale Nachrichtengröße auf 18 MB gesetzt und ClamAV Milter integriert, sowie das Spamassassin Modul von Plesk installiert.

Server ist ein AMD Opteron 144, 1,8 Ghz, 1 GB RAM, Debian Lenny mit Plesk 9.5.3, Apache 2.2.9, PHP 5.2.14, MySQL 5.1.51, Postfix, Courier-Imap, ClamAV, ClamAV-Milter, Spamassassin.

Auf was tippt ihr, was daran Schuld gewesen sein könnte?

Grüße
Bernhard
 
Besten Dank! Wurde auf die Standardwerte zurückgesetzt:

Code:
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0

War dann speziell MaxClients und ServerLimit zu hoch bemessen?
 
Ggf auch nen wechsel auf den worker in betracht ziehen.

Ebenfalls finde ich sind auch die Prefork Einstellungen noch ein wenig oversized, das würde der Server wohl auch niemals mit machen.


Grüße
 
Okay, habs noch weiter reduziert:

Code:
    StartServers          3
    MinSpareServers       3
    MaxSpareServers      7
    MaxClients          90
    MaxRequestsPerChild   0

Meinst du kommt er damit klar? Oder noch weniger?
 
Code:
MaxClients          90
Ein Apache Prozess benötigt π mal Daumen 10-15 MB, kannst dir ja dann selbst ausrechnen dass bei Erreichen der MaxClients der Server wieder im Nirvana wäre.
Die Hälfte wäre wohl ein verträglicher Wert für den Anfang, hängt aber natürlich davon ab was auf deinem System sonst noch so läuft (und damit Speicher benötigt).
Bei nur 1GB RAM würde ich vom Umstieg auf Worker MPM abraten, da der generelle Speicherverbrauch prinzipbedingt höher ist als bei Prefork. Behalte die Logs im Auge und wenn bei 45 öfter das MaxClients Limit erreicht wird solltest du dir Gedanken über ein RAM-Upgrade (falls möglich) machen, ansonsten eben ein "grösserer" Server.

;)
 
Last edited by a moderator:
Oder wenn es möglich ist auf lighttpd wechseln, geradebei der Hardware.

Den Apache wollte/muss ich schon behalten, auch wenn Lighttpd weniger braucht. Naja, so schlecht ist er nun auch wieder nicht (hatte bis vor kurzem noch einen kleinen VServer), es laufen aktuell so 20 - 25 Domains mit wenigen Zugriffen darauf, dafür reicht er leicht. Das maximale, was ich an Speicherverbrauch beobachtet hatte, waren dass noch 400 MB frei waren (die gecached wurden).

Ein Apache Prozess benötigt π mal Daumen 10-15 MB, kannst dir ja dann selbst ausrechnen dass bei Erreichen der MaxClients der Server wieder im Nirvana wäre.

Danke für den Tipp, werde ich gleich beherzigen! :-)
Ich muss wohl endlich die Doku zu dem Bereich mehr studieren.

Behalte die Logs im Auge und wenn bei 45 öfter das MaxClients Limit erreicht wird solltest du dir Gedanken über ein RAM-Upgrade (falls möglich) machen, ansonsten eben ein "grösserer" Server.

Wird gemacht! Danke! :-)
 
Eine Frage hätte ich noch: Warum läuft der Speicher gleich über und der komplette Server ist lahmgelegt, wenn der Ram voll wird? Müsste er dann nicht einfach zu swappen anfangen? Und woher weiß man, dass es überhaupt ein Speicherüberlauf war, wenn auf einmal gar nichts mehr in der syslog zu finden war?
 
Ja, Swap habe ich: 1.86 GB groß.
 

Attachments

  • speicherauslastung.png
    speicherauslastung.png
    21.8 KB · Views: 142
Last edited by a moderator:
Aufgrund der geringen Geschwindigkeit kann swap keinen Speicher für einen schlagartigen Bedarf zur Verfügung stellen, da kommt einfach die Festplatte nicht mit und das System hängt sich auf. Und wenn der Apache dazu noch so viel Speicher belegt dass auch für lebenswichtige Kernelprozesse nix mehr bleibt ist sowieso Feierabend.
 
Last edited by a moderator:
Wenn es tatsächlich am vollgelaufenen Speicher lag, müsstest Du in der Ausgabe von dmesg (bzw. in dmesg.old) eigentlich eine Meldung vom OOM-Killer finden:
Code:
dmesg  | grep -i 'oom'
 
Die dmesg-Meldungen werden zurück gesetzt, sobald du den Server neu bootest. Wenn also seit dem letzten Boot das Problem nicht wieder aufgetreten ist, ist klar, daß da nix drin steht...
Du könntest mal in den dmesg-Dateien unter /var/log nachschauen, aber gut möglich, daß der Server so beschäfftigt war, daß er die nicht mehr auf die Platte geschrieben hat.
 
Heute ist das Problem leider wieder aufgetreten. Ich habe mal die dmesg und die dmesg.0 angehängt. Ich kann leider nichts passendes finden, dass die Störung verursachen könnte. Laut Anbieter wurde das System Hardwaremäßig geprüft (Mainboard wurde kürzlich auch erst getauscht) und da sollte alles in Ordnung sein. In der syslog und anderen Logs steht gar nichts drin, ab einer bestimmten Zeit, zu der er wahrscheinlich nicht mehr erreichbar wurde, steht nichts mehr, nur dann wieder nach dem Reboot. Habt ihr vielleicht noch einen Tipp?
 

Attachments

Ich nochmals, heute ist es wieder aufgetreten. Langsam glaube ich nicht mehr an einen Speicherüberlauf.

Wenn ich SSH Verbindungen versuche, komme ich ganz vereinzelt mal durch und ein zweimal konnte ich mich sogar einloggen. Wenn ich dann aber z. B. einen reboot oder apache restart versuche, wird der Befehl zwar abgesetzt (Meldung Apache restarting kommt), dann tut sich aber nichts mehr und nach kurzer Zeit ist dann die SSH Verbindung wieder tot. Vielleicht ist da irgendwo ein Skript, das z.B. alle 48 Stunden die Daemons nicht mehr erreichbar macht. Einmal konnte ich sogar ein ps aux absetzen, die Ausgabe habe ich im Anhang in eine .txt Datei kopiert (für den Beitrag wäre es zu lang gewesen).

Später kam dann beim Aufbau einer SSH Verbindung auch ssh_exchange_identification: Connection closed by remote host.

Ich denke gerade auch über das neu Aufsetzen nach. Hatte vor kurzem auch zwei Rootkits aufgrund eines Sicherheitsloch im ProFTP von Plesk, laut rkhunter SHV4 und SHV5. Die wurden eigentlich entfernt, ich könnte mir aber beispielsweise vorstellen, dass noch eine Kleinigkeit irgendwo versteckt ist und das Phänomen von daher kommt.

Was meint ihr dazu? Danke für die Hilfe!
 

Attachments

Das ist jetzt wirklich wild geraten, aber ich hatte mal bei einem Server ähnliche Symptome - bis ich den Kernel mit noapic geladen habe, danach war Ruhe im Karton.
 
Back
Top