Co może spowodować, że WSZYSTKIE usługi na serwerze przestaną działać, ale nadal będą odpowiadać na polecenia ping? i jak się dowiedzieć

9

Zdarzyło mi się już dwa razy w ciągu kilku dni, kiedy mój serwer całkowicie przestaje działać, co oznacza, że ​​http, ssh, ftp, dns, smtp, w zasadzie WSZYSTKIE usługi przestają odpowiadać, jakby serwer został wyłączony, z wyjątkiem tego, że nadal odpowiada na ping , co najbardziej mnie buforuje.

Mam kilka skryptów php, które powodują duże obciążenie (procesor i pamięć) na serwerze w krótkich seriach, używanych przez małą grupę użytkowników, ale zwykle serwer „doskonale” przetrwa te serie, a kiedy zejdzie nigdy nie pokrywają się z takimi szczytami w użyciu (nie mówię, że nie można tego powiązać, ale nie dzieje się to zaraz po nich).

Nie proszę was, abyście magicznie byli w stanie powiedzieć mi ostateczną przyczynę tych awarii, moje pytanie brzmi: czy istnieje jeden proces, którego śmierć może spowodować, że wszystkie te usługi spadną jednocześnie? Zabawne jest to, że wszystkie usługi sieciowe ulegają awarii, z wyjątkiem ping. Gdyby serwer zjadł 100% procesora przez jakiś proces, nie zareagowałby również na ping. Jeśli Apache ulegnie awarii z powodu (na przykład) zepsutego skryptu php, wpłynie to tylko na http, a nie na ssh i dns .... itd.

Mój system operacyjny to Cent OS 5.6

Co najważniejsze, po ponownym uruchomieniu serwera, na jakie logi systemowe powinienem patrzeć? / var / log / messages nie ujawnia niczego podejrzanego.

matteo
źródło

Odpowiedzi:

8

( tl; dr nadal odpowiada na ping to oczekiwane zachowanie, sprawdź użycie pamięci)

Żądania echa ICMP (tj. Ping) są obsługiwane przez stos sieciowy jądra, bez żadnych innych zależności.

Jądro jest znane jako „rezydentne”, co oznacza, że ​​zawsze będzie przechowywane w pamięci RAM i nie będzie można go zamienić na dysk tak jak zwykła aplikacja.

Oznacza to, że w sytuacjach, w których kończy się brak pamięci fizycznej, aplikacje są zamieniane na dysk, ale jądro pozostaje tam, gdzie jest. Gdy zarówno pamięć fizyczna, jak i pamięć wymiany zostaną zapełnione (a system nie będzie mógł dłużej zarządzać programami), komputer się przewróci. Jednak ponieważ a) jądro jest nadal w pamięci ib) może odpowiadać na żądania ping bez pomocy czegokolwiek innego, system będzie nadal odpowiadał na ping mimo wszystkiego, co martwe.

Jeśli chodzi o twój problem, mocno podejrzewam problemy z pamięcią. Zainstaluj „sysstat” i użyj polecenia „sar”, aby wyświetlić dziennik pamięci / procesora / obciążenia / io obciążenia itp. Spodziewałbym się, że w momencie awarii zobaczysz zarówno używane w 100% fizyczne, jak i zamiany.

Zastanowiłbym się również, czy nie spojrzeć na komunikaty dmesg lub / var / log / w poszukiwaniu jakichkolwiek znaków wywołania OOM-killer (out-of-memory-killer). Jest to system awaryjny jądra, który rozpocznie proces zabijania w przypadku wyczerpania pamięci. Jego skuteczność zależy w dużej mierze od procesów, które są zabijane. Pojedynczy proces pochłaniający pamięć zostanie skutecznie zabity, a pamięć zwolniona, jednak strona internetowa oparta na Apache odrodzi procesy zastępcze, gdy tylko proces potomny zostanie zabity.

Coops
źródło
+1 dla OOM Killer
HTTP500
Wielkie dzięki, jestem prawie pewien, że to jest problem, ponieważ zarówno pamięć RAM, jak i wymiana były pełne przed awarią serwera. (Widzę statystyki menedżera ovh). I to prawdopodobnie niektóre z moich szalonych skryptów php wykorzystujących dużo pamięci. Łamie mnie to jednak z kilku powodów. (1) wygląda na to, że pamięć zjedzona przez php nie jest później uwalniana, ale to nie miałoby sensu; (2) w każdym razie nie spodziewałbym się, że właściwy system operacyjny umrze całkowicie z powodu jednego (lub nawet kilku) procesów zużywających zbyt dużo pamięci ... Oczekiwałbym, że tak
matteo
odmawiają przydzielania pamięci programom, które o to proszą, gdy nie ma wystarczającej ilości pamięci RAM, aby system działał poprawnie ... Mam na myśli, że błędny lub nawet złośliwy program nigdy nie powinien być w stanie zniszczyć całego systemu ...
matteo,
3
@matteo Linux ma coś, co nazywa „overcommit”: tylko dlatego, że malloc()1 GB pamięci RAM nie oznacza, że ​​zamierzasz go użyć, więc menedżer pamięci śledzi, ile pamięci ma program i ile pamięci program faktycznie używał i faktycznie działa dobrze przez większość czasu. Przynajmniej dopóki więcej niż jeden program nie zechce zużywać całego 1 GB, tak mu się wydaje.
DerfK
1
@ matteo Nie widzę żadnych oznak, że jest to problem OOM. Zazwyczaj OOM-killer wybiera konkretne procesy spełniające określone kryteria, ale nie zawsze zabija demona takiego jak ssh. Jest to zdecydowanie po stronie I / O. Nie wyjaśniłeś swojej sytuacji sprzętowej / specyfikacji, o co prosiłem w mojej odpowiedzi.
ewwhite
5

Zwykle jest to problem z We / Wy lub podsystemem dyskowym. Często będzie to połączone z wyjątkowo wysoką średnią obciążeniem systemu. Na przykład system wyszczególniony na poniższym wykresie przestał odpowiadać (ale był możliwy do pingowania), gdy skrypt działał nieprawidłowo, blokował kilka plików i ładunek wzrósł do 36 ... w systemie 4-procesorowym.

wprowadź opis zdjęcia tutaj

Usługi działające w pamięci RAM i niewymagające dostępu do dysku nadal działają ... Tak więc stos sieciowy (ping) jest włączony, ale inne usługi przestają działać, gdy wymagany jest dostęp do dysku ... SSH, gdy odwołany jest klucz lub potrzebne wyszukiwanie hasła. SMTP ma tendencję do zamykania się, gdy średnie obciążenie osiągnie około 30 ...

Gdy system jest w tym stanie, spróbuj użyć pilota w nmapstosunku do adresu IP serwera, aby zobaczyć, co jest grane.

Twoje logowanie prawdopodobnie nie działa, jeśli jest to problem z dyskiem lub pamięcią ...

Czy możesz opisać konfigurację sprzętu? Czy to jest maszyna wirtualna? Jaki jest układ pamięci?

Więcej niż logowanie, chcesz sprawdzić, czy możesz wykreślić wydajność systemu i zrozumieć, kiedy to się dzieje. Sprawdź, czy koreluje to z określoną aktywnością.

ewwhite
źródło
Przypuśćmy, że to jest problem. Czy istnieje sposób, aby powiedzieć SSH, aby zachował hasło (hasła) w pamięci, więc nawet jeśli serwer jest w tym stanie, mogę przynajmniej być w stanie zalogować się do niego przez ssh i uruchomić kilka poleceń, aby zobaczyć co się dzieje?
matteo
1
Jeśli to we / wy, musisz przejść do sedna problemu. Jeśli jest to limit czasu macierzy dyskowej lub interakcja sterownika, różni się to od skryptu, który źle się wykonuje, lub problemu z rywalizacją o zasoby.
ewwhite