Как стать автором
Обновить

Комментарии 112

Когда статья о моем сервисе вышла на главную, готовился к страшному, однако нагрузка на сервере не превысила 10%, при том, что настраивать apache не умею и использую дефолтный. Меня спасло то, что храню всю статику на Amazon S3.

Совет очевиден.
К сожалению, я как-то о хабраэффекте просто не подумал. Да и не рассчитывал, что попаду на главную, хотелось просто написать пару постов, немного набрать кармы.
Плюс для меня хранить все на своем серваке — это самое естественное. Там есть файлы, которые я выкладывал еще лет 6 назад, и по прежнему доступны по старым урлам. А сколько оно будет доступно на чужих сервиса — не всегда очевидно.
Поправил.
а вы не сильно на деньги попали после хабраэффекта на этом Амазон Эс3?
можно и в дропбокс положить пару картинок
тот же s3 но бесплатно…
По сравнению с оплатой ec2 оплата s3 просто несущественна — несколько баксов.
Сайты на шаред хостинге — апач без nginx. Много раз были на главной хабра и статика и динамика — никогда не было проблем с хабраэффектом.

Мое мнение заключается в том, что и грамотно настроенный апач может нормально работать.

Раньше апач был попроще, а сейчас поумнее стал и асинк-ио там есть и т.п.
Очень познавательно. Учту!
тут еще надо пост придумать такой, что бы на главную попал. то же непрогнозируемое событие :)
И апач можно настроить нормально.

Разрешать апачу запускать процессы пока не кончится память — идиотизм.
Берем mpm_prefork, ставим там 8-16-32 worker-ов максимум, и тогда вы никогда не выйдете в своп.
Перед ним — nginx желательно, но для хабраэффекта не обязательно.

Вот график потребления памяти с моего VPS-а, картинки на хабр вставляю без задней мысли всегда:

Как видим, потребление памяти вообще не зависит от нагрузки.
Ачто происходит, когда воркеры кончаются? Контент не отдается?
Поскольку кол-во физических ядер ограничено, при отдаче статики 64 воркера не сильно лучше 4-х.
Воркер заканчивает работу и берется за следующий запрос. Т.е. да, лишние запросы ожидают очереди.
С nginx ему конечно проще — тогда контент отдается «мгновенно», и апач работает в тепличном режиме.
+ очередь регулируется директивой ListenBacklog.
Оо… будь у меня VPS с 3.5G памяти я бы тоже особенно об этом не задумывался наверное.
Это VPS на 0.5Гб, остальные 2.5Гб — burstable, т.е. не гарантированные.
Про этого хостера собираюсь сегодня обзорчик написать :-)
По тестам — 28Мб/сек на статике, из Москвы в Германию ггг :-)
ха! привет джонни!

ngnix
Раз настраивал, скажи nginx-у можно сказать, что бы не обращал внимания на вхосты и передавал все апачу? а то описывать в nginx все полсотни вхостов, лежащих на одном апаче мне не хочется.
его можно вобще без апача, а можно и проксимировать
я бы пока предпочел просто проксей поставить, сразу на все не глядя. а уж потом смотреть по нагрузке и думать как тюнить.
Настроить-то так можно, но вряд ли удастся одним махом прописать отдачу статики нгинксом, другими словами, это просто переведет апач в более щадящий режим, но сильно нагрузку вряд ли снимет.

Отдача статики нгинксом + проксирование динамики по необходимости.

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

listen 80;
server_name _;
root /var/www/$host/;
location / {
proxy_pass http://$host:81/;



Дело в том, что я как раз той ночью около 5 утра попробовал этот «server_name _;» поставить, но отдаваться стал почему-то по всем вхостам только один.
С другой стороны я это делал сумбурно, не вчитываясь в конфиг, так что скорее всего просто где-то упустил. Потом будет время и я попробую вдумчиво изучить доку.
На всякий случай привожу свой конфиг nginx'a, авось поможет разобраться:
server {
listen 80 default;
server_name _;
location / {
proxy_pass 127.0.0.1:81;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* \.(jpeg|jpg|gif|png|css|js|pdf|txt|tar|ico|swf)$ {
root /var/www/static/$host;
}
}

В папке /var/www/static находятся симлинки с названиями доменов, ведут на папку document_root вхоста.
Ага. Спасибо, я попробую на днях поэкспериментировать.
работает, спасибо.

единственно что я не понял можно ли обойти как-то галерею, которая активно использует mod_rewrite для смены путей у jpeg.
не сталкивался, но мне кажется что если к примеру все картинки галереи вынести в домен 3 уровня, то можно этот домен заруливать целиком в апач
их не вынести, он их через php раздает. :)
собственно, как и указано в заголовке топика, — не стоит отдавать статику апачем.
да и динамику тоже не очень стоит :)
использую лайти (lighttpd) на самой простой VPS (что-то около 256 мег память, 500 MHz процессор) — все хаброэффекты прошли на отличненько.
Хабраэффекты легко держатся на shared хостинге за 250р/мес. Просто там по дефолту статику отдаёт nginx и если верить domaintools, там ещё 20 сайтов живёт, правда с неизвестной посещаемостью.

Вот Daily Hits с этого сервера, все хиты это картинки из моих постов на хабре:
С шаредом все понятно, там уже за тебя все настроили и думать не надо.
Но имея свой собственный сервер молотящий с 2002 года (с небольшими перерывами на апгрейд) хостить что-то у других людей просто не хотелось.

Кстати, не совсем видно, вот эти пики до 70к хитов, это за какой промежуток? А то одно дело за пол дня отдать столько, другое за пару часов.
Сейчас конечно просто говорить что нужен nginx.

Я вот сразу нацелился на оптимизацию рабочего сервера, ибо пока сервер стоит, я теряю клиентов (сам его кое как админю). Ставил nginx с версии 0.2 что ли, еакселератор для php, тюнил mysql и т.д. В итоге сейчас мой сервер (по конфигу p4 2.4ghz + 1gb ram + 1hdd ) держит два (мой и партнёра) сайты, и нагрузка на них не меньше хаброэффектов. Причём там не просто картинки, а страницы и файлы от 1мб до 10мб + статистика посетителей собирается в mysql. Так что настраивайте производительность, это никогда не помешает.

Вот за этот день по часам с сайта на шареде:

я согласен, что нужно любой софт настраивать. мой апач ставился довольно давно, и пока не приносил неприятностей, о нем просто не думал.

у вас по статистике 69к хитов за сутки, и трафик полтора гига. У меня примерно такие же значения получились за всего час-полтора хабраэффекта.
ну продолжайте дальше использовать LAMP…
Ну почему бы и нет?
С 2002 года это первый случай, когда возникли проблемы.
Все остальное время меня все устраивает.
кстате минусуюее красноглазое быдло попрошу аргументировать а не тупо жать кнопку
предположу, что им не нравится ваш комментарий.
вам как минимум необходимо было доказать свою точку зрения, указав что именно вы считаете неприемлемым в LAMP, и какие другие альтернативы лучше рассмотреть.
хотя пост уже ушел с главной страницы, так что думаю теперь сюда редко будет кто-то заглядывать.
ну так если не нравится — или пройди молча или ответь нормально. в оффлайне за такое уже б в харю дал
Я лично минусов не ставил, но мне кажется что комментарий в стиле «ЛДАП — гавно», без аргументов, ничего кроме минуса незаслуживает. И кстати последующий наезд в стиле «красноглазое быдло» также показывает огромную культуру диалога :)
я уже не раз пробовал объяснять но метать бисер перед свинями неблагодарное дело. потому тупо разжигаю
Мда, предлагаю вам посмотреть заголовки ответа вашего апача на ваши картинки:

Date: Sun, 11 Apr 2010 21:28:22 GMT
Server: Apache
Last-Modified: Sun, 14 Sep 2008 18:52:16 GMT
Etag: «acb238-abfb-456df9e0a1800»
Accept-Ranges: bytes
Content-Length: 44027
Content-Type: image/jpeg

200 OK

А где expires на месяц вперед? Из-за не настроенного кеширования вы увеличили себе нагрузку в 1.5 раза минимум.
Ну я вообще сейчас впервые слышу, что его надо было ставить :) Хотя док по апачу лет восемь назад читал приличное количество.
Ок, спасибо за подсказку, изучу вопрос.
А можно по подробней? Надо в апаче активировать mod_expires? Подкиньте конфиг apache, для сервера xeon quad core, 4 gb ram. Статистика отдается nginx, кеширование вроде включено, но эффекта от него незамечено. Апач генерит динамику с сайта. Нагрузка только mysql + apache процессы.
Прошу не минусовать, думаю многим будет полезен конфиг под их сервера.
Поставьте
expires 31d
в том location который отдает статику.
Т.е. если статику отдает nginx то ему и header-ы выставлять
Есть Etag, выставлять и Etag и expires это не совсем правильно, либо то либо то.
Очень даже правильно )

ETag нужен когда проверяют, обновилась ли картинка или нет — во второй раз будет короткий HTTP запрос.
Expires говорит «целый месяц даже не проверять, обновилась она или нет», т.е HTTP запроса во второй раз не будет вообщею
да правильно, сам так делал. но по-моему сейчас просто перепутал. при ETag запрос к серверу будет полюбому сделан, а expires если не нужно то нет. так что и правда нужно делать оба варианта.
Простите меня, новичка. Но чем вы все такие картинки с графиками генерите? Я вот только про monit знаю, он у меня версии 4.8.1, графики не строит.
А вроде вам я уже в джаббере ответил. Ну или ниже смотрите.
Спасибо! Дельная штучка, буду ковырять. Только у меня джаббера нету, скорее всего вы меня с кем-то спутали.
Если лень разбираться с самим rrd (а там все же некоторые вещи специфичны для понимания) можно взять какую-нибудь из готовых утилит на базе этого проекта. Посмотрите на сайте разработчика, там есть ссылки на утилиты использующие rrd.
Например я в одном месте использую web.taranis.org/drraw/, графики создаются приямо из вебинтерфейса.
munin еще есть )
мунин это полноценный мониторинг. тут скорее разговор именно о тулзе для построения графиков.
munin использует rrdtool :)
Да и cacti вроде тоже :)
Господа, а что за тул у вас мониторит систему и строит такие графики?
Никакого шаманства.
Все графики строятся утилитами rrdtool. Это комплект из циклической базы данных и утилит для внесения в нее данных и постройки графиков.

Например загрузка процессора/памяти — просто по крону запускается ежеминутно скрипт, который делает типа cat /proc/loadavg |awk '{print $1}' и запихивает значения в базу. А потом раз в эн минут вызывается скрипт и герерит картинку.

Ну а логи апача я обработал скриптом, который считал поминутную нагрузку (на том же bash/awk) и забивал в только-что созданную базу rrd. Потом сделал с нее пару графиков за нужный диапазон.
напишите обзор rrdtool с примерами?
честно говоря сам настраивал по обзорам, в т.ч. и по русским, так что не думаю, что в этом есть большой смысл…
А в чем тогда смысл?
Сделайте, введите в курс дела так сказать.
вбейте сабж в гугль и вы удивитесь, как много инфы и обзоров по rrdtool
НЛО прилетело и опубликовало эту надпись здесь
Проблема апача в том, что он на каждое соединение форкает по процессу (до достижения MaxServers которое видимо у автора по дефолту стояло 150), а каждый процесс жрет прилично памяти. Особенно плохо на OpenVZ, где считается вся выделянмая память.

Выводы — 1) апач монстр, ведь в каждый процесс подгружается куча библиотек 2) не стоит делать форк на каждый коннект

Nginx отдает на дохлом VPS 1800 статич. ф-в в секунду, и хоть бы хны.
Ну я догадался к середине ночи уменьшить количество процессов от дефолтного пополам, что бы хотя бы не кончалась в ноль вся память.
Хорошая вменяемая статья. Автора пива бы поставил.
С таким железом, да не справиться с такой плевой нагрузкой — стыдно, мне кажется.
Ну вот перед вами реальные условия, реальный софт без тюнинга — это приводило к перегрузке системы.
Может кому-то еще поможет лучше понять зачем необходима тонкая настройка веб сервера.
Может кто подкинет стоящие советы по настройкам apache, nginx, mysql :)
знаю что в инете много доков, но лучше будет примеры настроек с боевых серверов. Пишите железо, нагрузки, вид контента. И какой тюнинг делали.
Конфиг nginx'а имеет смысл писать, исходя из реальной посещаемости, апач же — исходя в первую очередь из железа, на мой взгляд.
Вот кусок конфига апача на «живом» сервере:
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 3
MaxSpareServers 4
MaxClients 15
MaxRequestsPerChild 1024

По железу: 1 Gb оперативки, проц — какой-то 2хядерный кастрат от интела, особо не интересовался.
По контенту: очень много картинок (одна игровая карта в 7 слоев чего стоит), скрипты почти все на php.
По посещаемости: 120-150 человек онлайн в любой момент времени, чем-то там занимаются -)

Действительно факт, что статику лучше обрабатывать не апачем. Когда жареный петух клюнул, натравил nginx на статику и настроил апач, нагрузка на сервер уменьшилась в 4-5 раз, памяти освободилось тоже очень прилично. По сути сейчас сервер способен переварить dos в 100 потоков к тяжелой странице, отдав на каждый запрос весь нужный контент (при том, что до mysql руки пока не дошли).
есть мнение, что апач, сконфигурированый с mpm event будет намного экономичнее
вот моя статистика после выхода на главную —
а что измеряется? это количество коннектов?
да, количество подключений к nginx'у
«Поскольку» и «поэтому» слитно пишется.
Простите за нудность, но уж больно глаз режет.

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

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

Сначала посты были размещены в блогах, по этому большого трафика не было.
«Необходимо внедрение reverse proxy, например nginx.»

Путаете функцию реверс прокси с простым асинхронным веб сервером.
Картинки nginx сам должен с диска читать, а не через apache забирать. Некоторые например на отдельный хост уносят статику, что-то типа
s.domain.ru, а на apache надо передавать запросы только по динамике.
я назвал реверс-прокси в качестве минимума для решения вопроса нагрузки.
дальнейший разбор на статику и динамику, отдачу разными средствами — это уже следующая ступень развития.
На отдельных хост уносят по другой причине — чтобы туда с запросами лишние куки не прилетали :-)
так было проще объяснить :)
лимиты надо было нормально настроить чтобы OOM-killer не приходил
Сейчас картинки, я смотрю, лежат на fastpic :)
в этот раз подстраховался, ибо еще не успел настроить все по новому :)
да уж, я в апаче почти все модули отключаю, даже .htaccess — когда процессов много даже пол-мегабайта памяти влияют существенно :)
Удивительно, что в 2010 году кто-то до сих пор использует Апач…
А почему бы и нет, как backend, за теми же nginx/lighttpd?
Wikimedia и те, не гнушаются апачем :)
А зачем он, если nginx/lighttpd и так прекрасно со всей динамикой сцепляются?
Не заморачиваясь включением мозга позволю себе скопировать с одного форума:
«Apache — огромная система, способная делать кучу всего, для которой написано огромное количество модулей.
Nginx — маленький web-сервер, созданный под узкий круг задач и заточенный на их быстрое и оптимальное выполнение.»

Наличие горы наработок ускоряет и удешевляет дальнейшую разработку. И да, зачастую дешевле докупить пару серверов, чем оптимизировать код (особенно, и так уже вылизанный и причёсанный).
Ну, это неправда просто. То, что в апаче делается модулем, в nginx-е обычно делается подключением бэкенда через fastcgi. Что там надо в апаче делать? Это веб-сервер, а не звездолёт. Его дело принять запрос и передать на динамику, а результат отдать обратно. PHP к нему цепляется, ява к нему цепляется, перл цепляется… чего ещё надо-то?

Просто реально нет массовых задач, для которых нужен именно апач. Ну разве что виртуальный хостинг — да, там он удобнее из-за .htaccess. А на отдельном проекте зачем этого слона держать? Он просто не нужен.
Хмм… вот тут спорить не буду, ловите плюс, наверняка и для включения поддержки .htaccess есть какой-нибудь модуль под nginx.
Нет, нету, это у Игоря принципиальная позиция. Она понятна — если при каждом запросе дёргать файл, какая уж тут производительность…
> 2xPentium 3 866mhz / 512 MB / 5x9Gb uw-scsi raid5 (soft)

прелесть-то какая.
дык хватает. :)
на самом деле апгрейд запланирован был еще на конец того года, но из-за личных финансовых кризисов немного отложился.
Ребята, скажите мне, вы вообще где все хоститесь? Что у вас за хостинги такие, которые ложатся от попадания статьи на главную хабра?

У меня в блоге и 20 тысяч уникальных посетителей в день было, и 60 тысяч. И каждый просматривает не по одной странице. И никакого «хабраэффекта». И хостинг шаред на Dinohost.Ru, а не сервак отдельный.

При этом блог на «вордпрессе», а это не самая легкая CMS, хоть и оптимизированная мной.
а ты внимательно прочитал текст статьи? там все написано про то что это за хостинг. :)
Мы знакомы? Вы внимательно прочитали комментарий? Там обращение не только к автору. Умный и наблюдательный человек непременно припомнит периодически повторяющиеся топики в духе «ура, нас заметили и аж сервер упал».
не понял.
сделал и все равно не понял.
можно своими словами?
можно.
но долго.
translate.google.com/translate?u=http://wiki.coralcdn.org/wiki.php%3Fn%3DMain.Servers&hl=ru&langpair=auto|ru&tbb=1&ie=ISO-8859-1
зато по моей лежит готовый конфиг от апача
и в Examples ещё один
понятнее не бывает
кстати вот habrahabr.ru/blogs/i_recommend/82739/
хабраэффект чувствую только на графиках лиру. Года 3 уже на nginx`е с пирогами, но дело даже не в этом =) можно и апач настроить, чтобы отдавал не хуже остальных. li.ru тот же вон гляньте =)
чёта про пироги туплю в полчетвёртого утра…
что за пироги?
пол года прошло, ничего не смущает?
могу поделится скриптом автоматической генерации nginx.conf для cpanel сервера.
что такое cpanel?
НЛО прилетело и опубликовало эту надпись здесь
привет, тролль.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации