Переполнение памяти веб-сервера CentOS - не удается войти
Несколько дней назад мой веб-сервер CentOS 6.2 с ISPconfig 3 вышел из строя до такой степени, что я не смог войти ни по SSH, ни через консоль. Консоль была полна сообщений "нехватка памяти, процесс убийства, жертва детей" или что-то в этом роде. Запрос на вход в систему через SSH появился через минуту ожидания, запрос пароля через одну или две минуты и т. Д. Система была явно сильно перегружена. Я не смог перезапустить его чисто, поэтому я сильно переустановил его. Я думал, что это была какая-то единичная ошибка, но та же самая ситуация повторилась несколько часов назад. Это рабочий сервер, и я не мог позволить себе экспериментировать, поэтому я просто увеличил объем ОЗУ (это виртуальная машина Hyper-V) с 1 ГБ до 2 ГБ и перезапустил его еще раз. Теперь он работает в течение двух дней или что-то в этом роде. На следующий день та же самая ситуация повторилась с другой подобной машиной, CentOS 6.3. Я просто перезапустил его без увеличения оперативной памяти, и теперь он работает нормально.
Я не уверен, что это такое, почему это произошло и как этого избежать. Мне кажется, что было выделено слишком много оперативной памяти, поэтому система начала выкладывать и выгружать все данные, что приводило к снижению производительности практически до остановки машины. Это sar
лог со второй машины:
12:03:14 AM CPU %user %nice %system %iowait %steal %idle
06:40:52 AM all 0.10 0.00 1.59 98.31 0.00 0.00
07:37:29 AM all 0.09 0.00 1.37 98.54 0.00 0.00
09:51:37 AM all 0.07 0.00 1.34 98.59 0.00 0.00
11:01:13 AM all 0.05 0.00 1.35 98.61 0.00 0.00
12:57:39 PM all 0.09 0.00 1.60 98.31 0.00 0.00
Возможно ли, что это была какая-то атака DOS? Обе машины имеют числовые последовательные IP-адреса, так что, может быть, это то, что принимает адреса один за другим? Это указывает на некоторую слабость в настройке безопасности? Есть ли способ, как я могу более точно сказать, что случилось и почему?
Самым большим сюрпризом было то, что я не смог войти в систему и работать с системой вообще. Linux должен делать это? Или это означает, что моя конфигурация как-то не так? Нужно ли иметь какие-то настройки, чтобы запретить какой-либо процесс, потребляющий слишком много памяти? Это может произойти, или это означает, что я исказил установку?
РЕДАКТИРОВАТЬ - больше информации о настройке:
На обеих машинах установлено следующее: ISPConfig 3, Apache, MySQL, PHP, Postfix, Courier, PureFTPd, Bind (установка ISPConfig по умолчанию в CentOS). Они работают как веб-серверы с довольно низкой нагрузкой - вторая машина, с которой взят отрывок sar, обслуживала 8000 файлов в день, когда это произошло.
sar
журнал был выдержкой за период времени, когда возникла проблема. Сразу после перезагрузки он вернулся к нормальной работе, которая выглядит следующим образом (текущий sar
журнал, iotop
показывает почти 0 читает 0 пишет сейчас):
07:20:01 AM CPU %user %nice %system %iowait %steal %idle
07:30:01 AM all 1.15 0.00 0.27 0.38 0.00 98.20
07:40:01 AM all 0.96 0.00 0.23 0.24 0.00 98.57
07:50:01 AM all 1.71 0.00 0.37 1.86 0.00 96.07
Согласно журналам Apache, не было никакой необычной загрузки или исключительного числа запросов. Я нашел только эту необычную строку в журнале ошибок:
[Tue Feb 19 05:39:30 2013] [error] server reached MaxClients setting, consider raising the MaxClients setting
Это, кажется, корень проблем, не так ли?
1 ответ
Хорошо, больше никаких подсказок или ответов, поэтому вопрос, вероятно, недостаточно конкретен. Я, вероятно, приму "перегрузку веб-сервера" в качестве заключения. Однако я до сих пор не знаю, почему это произошло или это может быть какая-то атака DOS. Возможно, это особенность Apache в том, что у него не хватает MaxClients, когда он слишком долго работает? Тем не менее, решение "перезагрузить сервер, увеличить объем оперативной памяти" - это, вероятно, то, с чем я могу жить (или, по крайней мере, мне придется).