Pull to refresh

Хабраэффект глазами сервера или почему не стоит апачем раздавать статику

System administration *
В статье я расскажу впечатления от хабраэффекта наблюдаемом на личном сервере.



В ней не будет ничего нового для тех, кто давно занимается вебом, а особенно для администраторов решавших вопросы защиты от DDOS.
Просто небольшая заметка о том, как я наблюдал хабраэффект.


У меня уже довольно давно стоит выделенный сервер для различных веб-проектов, ну и в качестве доступной отовсюду файлопомойки. Вначале 2000-ных это была просто обычная десктопная машина, постепенно задачи росли, машинка грейдилась из подручных или списанных комплектующих. Последний раз апгрейд был в 2006 году, и до сей поры железо в ней не менялось.
Сейчас по железу это: 2xPentium 3 866mhz / 512 MB / 5x9Gb uw-scsi raid5 (soft)

Честно говоря, поскольку никаких серьезных нагрузок на сервак никогда не было, вопрос о тюнинге софта никогда и не всплывал. Там хостятся несколько домашних сайтов, пара галерей, несколько форумов и пара тестовых самописных cms.

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

Сначала посты были размещены в блогах, поэтому большого трафика не было. А вот дальше они, набрав какое-то количество баллов, оба попали на главную. И тут я получил сообщения от мониторинга, что хост перегружен, и почти сразу же — что кончилась память.

На графике это выглядело так:

Первый график — это loadavg, нормальная загрузка на 100% обоих процессоров равняется 2, а обычно держится в пределах 0.5-1. Второй — память, третий — своп.
Видно, что в примерно в 23:30 закончилась физическая память, начал заканчиваться своп. Примерно к 23:38 своп то же закончился, и нагрузка поползла сильно вверх, т.к. сервер уже перестал отвечать на запросы и пытался переварить то, что есть.

В этот момент пришлось принудительно рестартнуть apache, т.к. именно он был запущен в 150 экземплярах и сожрал всю память. Освободилось 300 мегабайт физической памяти и около 120 свопа. Ненадолго это помогало, но через небольшие отрезки времени все повторялось.

Я разобрал статистику по хитам, получились два таких симпатичных графика:

Первый график — это хиты за минуту.
Этот сервер совершенно не нагружен, так что 0-10 хитов это то, что я обычно наблюдаю. Тут мы видим, что начиная с 23:20 количество хитов подскочило до 600-800 в минуту, и и на этом ресурсы апача кончились. Отдельно я посчитал хиты с главной страницы хабра, на два джипега стоящие в заголовках статей, они показаны синим графиком.
Второй график — это трафик. В пиках он показывает до 30 мегабайт за минуту. И регулярно по 3-5 мегабайт в минуту с главной страницы.

Настройки апача были дефолтные:
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 10000


В моменты нагрузки loadavg больше 20-30 машинка становится очень задумчивой.
Top отрисовывает экран раз в 3-4 минуты, команды консоли срабатывают с задержкой в минуту.
Вот скриншот снятый с top примерно в 1:50, во время последнего пика.


А логах это выглядело вот так:
линк на pastebin.com

Апач начинает плодиться, память кончается, oom-killer смотрит, что самое жирное в памяти (mysql) и прибивает его. После этого он пытается прибивать других апачей, но плодятся они достаточно быстро.
За ночь oom-killer отработал 37 раз, пять раз по mysql (в те моменты когда он был запущен), остальное по апачу.

Первый пост содержал 762 кб изображений, второй 361 кб. Это под катом, снаружи — в каждом по одной картинке на 27 кб.

За время с 22:00 до 04:00 в логе зарегистрировано 126 939 хитов, отдано 4.14 гигабайта трафика.
Вся нагрузка — исключительно отдача статики, никаких CGI/PHP с сайта не грузилось, отдавались только картинки. За это время запросов к другим частям сайта и другим сайтам было не больше десятка, так что на статистику они не повлияли.
Сам лог апача за это время вырос примерно на 60 мегабайт.

Вывод от капитана очевидность: apache плохо отдает статику при высокой нагрузке.
Необходимо внедрение reverse proxy, например nginx.

N.B. Прошу настоящих хостеров не меряться пиписьками, все понятно, что вы специально настраиваете софт для хайлоада, и отдаете такой трафик ежеминутно. Моя статья не о том.

Спасибо за внимание. Готов выслушать любые интересные советы.
Tags:
Hubs:
Total votes 169: ↑143 and ↓26 +117
Views 3.2K
Comments 112
Comments Comments 112