Что может привести к остановке ВСЕХ служб на сервере, но при этом все еще реагировать на пинг? и как выяснить

9

За последние несколько дней со мной уже дважды случалось, что мой сервер полностью отключался, что означает, что http, ssh, ftp, dns, smtp, в основном, ВСЕ службы перестают отвечать, как если бы сервер был выключен, за исключением того, что он все еще реагирует на пинг. Это то, что больше всего поражает меня.

У меня есть некоторые php-скрипты, которые вызывают огромную нагрузку (процессор и память) на сервере короткими пакетами, используемыми небольшой группой пользователей, но обычно сервер прекрасно «выживает» для этих пакетов, и когда он выходит из строя никогда не совпадают с такими пиками в использовании (я не говорю, что это не может быть связано, но это не происходит только после них).

Я не прошу, чтобы вы волшебным образом могли сказать мне конечную причину этих сбоев, мой вопрос: есть ли один процесс, смерть которого может привести к одновременному прекращению работы всех этих служб? Самое смешное, что все сетевые сервисы отключаются, кроме ping. Если бы сервер израсходовал 100% ресурсов процессора, то он не отвечал бы на пинг. Если произошел сбой apache из-за (например) сломанного php-скрипта, это повлияет только на http, а не на ssh и dns .... и т. Д.

Моя ОС - Cent OS 5.6

Что наиболее важно, после полной перезагрузки сервера, какие системные журналы я должен посмотреть? / var / log / messages не показывает ничего подозрительного.

Matteo
источник

Ответы:

8

( tl; dr по- прежнему реагирует на ping - это ожидаемое поведение, проверьте использование памяти)

Эхо-запросы ICMP (т. Е. Ping) обрабатываются сетевым стеком ядра без какой-либо другой зависимости.

Ядро известно как «резидентный», что означает, что оно всегда будет храниться в оперативной памяти и не может быть перенесено на диск, как обычное приложение.

Это означает, что в тех случаях, когда вы запускаете приложения с нехваткой физической памяти, выкладываются на диск, но ядро ​​остается там, где оно есть. Когда физическая память и память подкачки заполнены (и система больше не может управлять вашими программами), машина перестанет работать. Однако, поскольку а) ядро все еще находится в памяти и б) оно может отвечать на запросы ping без помощи чего-либо еще, система будет продолжать отвечать на ping, несмотря на то, что все не работает.

Что касается вашей проблемы, я бы сильно подозревал проблемы с памятью. Установите «sysstat» и используйте команду «sar», чтобы просмотреть журнал загрузки памяти / процессора / загрузки / ввода-вывода и т. Д. Я ожидаю, что во время сбоя вы увидите как 100% физическое использование, так и использование подкачки.

Я также хотел бы рассмотреть в dmesg или / var / log / messages любые признаки вызова OOM-киллера (out-of-memory-killer). Это аварийная система ядра, которая начнет уничтожать процессы в случае исчерпания памяти. Его эффективность во многом зависит от того, какие процессы убивают. Один процесс, потребляющий память, будет эффективно уничтожен и освобожден, однако веб-сайт на основе Apache будет вызывать процессы замены, как только дочерний процесс будет убит.

Coops
источник
+1 для OOM Killer
HTTP500
Большое спасибо, я почти уверен, что это проблема, так как оперативная память и подкачка были переполнены до отказа сервера. (Я могу видеть на статистике менеджера ovh). И это, вероятно, некоторые из моих сумасшедших PHP-скриптов, использующих много памяти. Однако меня это озадачивает по нескольким причинам. (1) похоже, что память, съеденная php, впоследствии не освобождается, но это не имеет смысла; (2) в любом случае, я не ожидал бы, что надлежащая операционная система полностью умрет только из-за одного (или даже нескольких) процессов, использующих слишком много памяти ... Я бы ожидал этого
matteo
отказываться выделять память программам, запрашивающим ее, когда не хватает оперативной памяти для
нормальной
3
@matteo Linux имеет то, что он называет «сверхкоммитом»: просто то, что вы malloc()1 ГБ оперативной памяти, на самом деле не означает, что вы собираетесь его использовать, поэтому диспетчер памяти отслеживает, сколько памяти ваша программа считает, и сколько памяти Программа фактически использовалась, и она фактически работает хорошо, большую часть времени. По крайней мере, до тех пор, пока более чем одна программа не захочет использовать все 1 ГБ, которые она считает, что имеет.
DerfK
1
@matteo я не вижу не признака того, что это является проблемой ООЙ. Как правило, OOM-killer выбирает определенные или процессы, которые соответствуют определенным критериям, но он не всегда убивает таких демонов, как ssh. Это определенно на стороне ввода / вывода. Вы не объяснили свою аппаратную ситуацию / спецификации, как я просил в своем ответе.
ewwhite
5

Обычно это проблема ввода-вывода или дисковой подсистемы. Часто это сопровождается чрезвычайно высокой средней загрузкой системы. Например, система, детализированная на графике ниже, перестала отвечать (но была проверена), когда скрипт запускался неправильно, блокировал кучу файлов и нагрузка возросла до 36 ... в системе с 4 процессорами.

введите описание изображения здесь

Службы, работающие в оперативной памяти и не требующие доступа к диску, продолжают работать ... Таким образом, сетевой стек (ping) работает, но другие службы останавливаются, когда требуется доступ к диску ... SSH, когда ссылается ключ или требуется поиск пароля. SMTP имеет тенденцию отключаться, когда средняя нагрузка достигает 30 или около того ...

Когда система находится в этом состоянии, попробуйте использовать удаленный nmapIP-адрес сервера, чтобы узнать, что происходит.

Возможно, ваше ведение журнала не работает, если это проблема с диском или хранилищем ...

Можете ли вы описать настройку оборудования? Это виртуальная машина? Что такое макет хранилища?

Больше, чем ведение журнала, вы хотите увидеть, сможете ли вы построить график производительности системы и понять, когда это происходит. Посмотрите, соответствует ли это конкретному виду деятельности.

ewwhite
источник
Предположим, что это проблема. Есть ли способ сообщить SSH о том, чтобы сохранить пароль (пароли) в памяти, поэтому даже если сервер находится в этом состоянии, я, по крайней мере, смогу войти в него через ssh и выполнить некоторые команды, чтобы увидеть в чем дело?
Маттео
1
Если это ввод / вывод, вам нужно докопаться до сути проблемы. Если это тайм-аут дискового массива или взаимодействие с драйвером, это отличается от сценария, который выполняется плохо или проблема конфликта ресурсов.
ewwhite