Frage Was kann dazu führen, dass ALLE Dienste auf einem Server ausfallen und dennoch auf Ping reagieren? und wie man es herausfinden kann


Es ist mir schon zweimal innerhalb weniger Tage passiert, dass mein Server komplett herunterfährt, also http, ssh, ftp, dns, smtp, grundsätzlich reagieren ALLE Dienste nicht mehr, als ob der Server ausgeschaltet worden wäre, außer dass er immer noch auf ping reagiert , was mich am meisten buffelt.

Ich habe einige PHP-Skripte, die eine große Last (CPU und Speicher) auf dem Server in kurzen Bursts verursachen, die von einer kleinen Gruppe von Benutzern verwendet werden, aber normalerweise "überlebt" der Server perfekt zu diesen Bursts, und wenn es herunterkommt nie mit solchen Spitzen in der Nutzung zusammenfallen (ich sage nicht, dass es nicht verwandt sein kann, aber es passiert nicht direkt danach).

Ich verlange nicht, dass du mir magisch sagen kannst, was die ultimative Ursache für diese Abstürze ist, meine Frage ist: Gibt es einen einzigen Prozess, dessen Tod alle diese Dienste gleichzeitig zum Erliegen bringen könnte? Das Lustige ist, dass alle Netzwerkdienste außer Ping heruntergehen. Wenn der Server 100% der CPU von einem Prozess verbraucht hätte, würde er auch nicht auf Ping antworten. Wenn Apache wegen (zum Beispiel) eines fehlerhaften PHP-Skripts abgestürzt ist, würde das nur http betreffen, nicht ssh und dns .... usw.

Mein Betriebssystem ist Cent OS 5.6

Vor allem, nach dem Neustart des Servers, welche Systemprotokolle sollte ich betrachten? / var / log / messages zeigt nichts Verdächtiges an.


8
2017-10-21 12:10


Ursprung




Antworten:


(tl; dr immer noch auf Ping reagieren ist ein erwartetes Verhalten, überprüfen Sie Ihre Speicherauslastung)

ICMP-Echoanforderungen (d. H. Ping) werden von dem Netzwerkstapel innerhalb des Kernels ohne weitere Abhängigkeit behandelt.

Der Kernel ist als "resident resident" bekannt, was bedeutet, dass er immer im RAM gehalten wird und nicht wie eine normale Anwendung auf die Festplatte ausgelagert werden kann.

Dies bedeutet, dass in Situationen, in denen nicht genügend physischer Speicher zur Verfügung steht, Anwendungen auf die Festplatte ausgelagert werden, der Kernel jedoch dort bleibt, wo er ist. Wenn sowohl der physische als auch der Auslagerungsspeicher voll sind (und das System Ihre Programme nicht lange verwalten kann), wird die Maschine umfallen. Aber weil ein) der Kernel ist noch im Speicher und b) es kann auf Ping-Anfragen ohne die Hilfe von etwas anderem antworten, das System wird weiterhin auf Ping antworten, obwohl alles tot ist.

In Bezug auf Ihr Problem würde ich stark Speicherprobleme vermuten. Installiere "sysstat" und benutze den "sar" -Befehl, um ein Log von Speicher / CPU / Load / Io Load etc. zu sehen. Ich würde erwarten, dass zu den Zeiten des Absturzes sowohl 100% physisch als auch Swap benutzt werden.

Ich würde es mir auch ansehen dmesg oder / var / log / Nachrichten für jedes Zeichen des OOM-Killer (Out-of-Memory-Killer), der aufgerufen wird. Dies ist das Notfallsystem des Kernels, das im Falle einer Erschöpfung des Speichers mit dem Töten beginnen wird. Die Effektivität hängt weitgehend davon ab, welche Prozesse getötet werden. Ein einzelner Prozess, der die Erinnerung in Mitleidenschaft zieht, wird effizient gelöscht und Speicher freigegeben, jedoch wird eine Apache-basierte Website Ersatzprozesse erzeugen, sobald ein Kindprozess getötet wird.


7
2017-10-21 13:06



+1 für OOM Killer - HTTP500
Vielen Dank, ich bin mir fast sicher, dass dies das Problem ist, da sowohl der RAM als auch der Swap vor dem Serverausfall voll waren. (Ich kann auf ovh's Manager Statistiken sehen). Und es sind wahrscheinlich einige meiner verrückten PHP-Skripte mit viel Speicher. Es rätselt mich aber aus mehreren Gründen. (1) sieht so aus, als wäre die von php aufgefressene Erinnerung nicht frei, aber das würde keinen Sinn ergeben; (2) In jedem Fall würde ich nicht erwarten, dass ein funktionierendes Betriebssystem vollständig stirbt, nur weil ein (oder auch nur wenige) Prozesse zu viel Speicher verbrauchen ... das würde ich erwarten - matteo
weigern sich, Speicher für Programme zu reservieren, die danach fragen, wenn es nicht genug RAM gibt, damit das System weiter funktioniert ... Ich meine, ein fehlerhaftes oder sogar bösartiges Programm sollte niemals das ganze System zerstören können ... - matteo
@matteo Linux hat das, was es "overcommit" nennt: nur weil du malloc() 1 GB RAM bedeutet nicht, dass Sie es tatsächlich verwenden, also merkt sich der Speichermanager, wie viel Speicher Ihr Programm hat und wie viel Speicher das Programm tatsächlich genutzt hat. Es funktioniert tatsächlich gut, die meisten davon Zeit. Zumindest, bis mehr als ein Programm tatsächlich alle 1 GB nutzen will, die es zu haben scheint. - DerfK
@matteo Ich verstehe Nein Hinweis darauf, dass dies ein OOM-Problem ist. Normalerweise wählt der OOM-Killer bestimmte oder Prozesse, die bestimmte Kriterien erfüllen, aber es würde nicht immer einen Daemon wie ssh töten. Dies ist definitiv auf der I / O-Seite. Sie haben Ihre Hardware-Situation / Spezifikationen nicht so erklärt, wie ich es in meiner Antwort gefordert habe. - ewwhite


Normalerweise handelt es sich um ein I / O- oder Festplatten-Subsystemproblem. Häufig wird dies mit einem extrem hohen Systemlastdurchschnitt verbunden sein. Zum Beispiel reagierte das in der folgenden Grafik beschriebene System nicht mehr (war jedoch pingbar), als ein Skript fehlschlug, blockierte eine Reihe von Dateien und die Last stieg auf 36 ... auf einem 4-CPU-System.

enter image description here

Die Dienste, die im RAM ausgeführt werden und keinen Festplattenzugriff erfordern, werden weiterhin ausgeführt ... Der Netzwerkstapel (Ping) ist also aktiv, aber die anderen Dienste blockieren, wenn der Plattenzugriff erforderlich ist ... SSH, wenn auf einen Schlüssel verwiesen wird oder Passwort-Suche benötigt. SMTP neigt dazu, herunterzufahren, wenn der Lastdurchschnitt 30 oder so erreicht ...

Wenn sich das System in diesem Zustand befindet, versuchen Sie eine Fernbedienung nmap gegen die IP des Servers zu sehen, was los ist.

Ihre Protokollierung funktioniert wahrscheinlich nicht, wenn dies ein Datenträger- oder Speicherproblem ist ...

Können Sie das Hardware-Setup beschreiben? Ist das eine virtuelle Maschine? Was ist das Speicherlayout?

Mehr als nur Protokollierung, möchten Sie sehen, wenn Sie die Systemleistung grafisch darstellen und verstehen können, wenn dies geschieht. Prüfen Sie, ob dies mit einer bestimmten Aktivität zusammenhängt.


4
2017-10-21 12:19



Angenommen, dies ist das Problem, gibt es eine Möglichkeit, SSH zu sagen, das Passwort (s) im Speicher zu halten, so dass auch wenn der Server in diesem Zustand ist kann ich zumindest in der Lage sein, sich über ssh anmelden und einige Befehle ausführen, um zu sehen Was ist los? - matteo
Wenn es sich um E / A handelt, müssen Sie dem Problem auf den Grund gehen. Wenn ein Festplatten-Array-Timeout oder eine Treiberinteraktion vorliegt, unterscheidet sich dies von einem Skript, das schlecht ausgeführt wird, oder von einem Ressourcenkonfliktproblem. - ewwhite