Здравствуйте.Вот сижу уже неделю над тем что бы побороть тормоза в апаче.
Моя история такова.
Есть сервер:
Intel(R) Xeon(TM) CPU 2.80GHz, 2 гига памяти, SCSI HDD, FreeBSD 5.4На нем крутися апач+мускуль+ПХП. Это все хозяйство обслуживает сайт с посещаемостью приблизительно 18000 уникальных заходом в день.
Проблема, остро, встала тогда, когда после захода на сайт апач начинал отдавать контент только секунд через 40. Пробовал апач 1.3.33,34,37. Пробовал менять таймауты, MaxClients, MaxRequestPerChild и т.д. это не давало ожидаемого результата. Проблема в том, сколько бы MaxClients я не выставлял они через минуту все ломятся на сервер, хоть в документации и говорится что масксимально, без перекомпиляции апача, можно выставить всего 256 клиентов, я ставил до 370 и все они через минуту приходили на сайт (тоесть я видел 371 процесс апача по ps ax, с учетом того что KeepAlive on).Я пришел к выводу что причина медленной реации апача в том что запросы к нему выстраиваются в очередь. Что бы хоть как-то разрузить апач была реализована схема на основе mod_rewrite+mod_proxy для заргрузки одного сайта сразу с разных серверов.
Это был огромный шаг вперед, сайт стал просто летать. Но через сутки сервер на котором стоит mod_rewrite+mod_proxy опять заполонили процесси апача, хоть задержка и возросла до 3 секунд, это всеравно можно считать успехов посравнению с 40 секундами. Загрузка серва составляет 0.3, в свапе 160 килобайт. Такое впечатление что сервер просто отдыхает
Но меня не покидает мысль о том что если он постоит еще сутки задержка будет 6 сек и т.д.
Посоветуйте пожалуйста хоть что нибудь как разгрузить сервер без ущерба для дела и клиентов. Я уже не знаю что читать и куда смотреть.
Пожалуйста помогите. Пожалуйста...!!!
ой забыл добавить.
прикрутил к ПХП оптимайзер, поставил апач модули для защиты от флуда и ДОС атак, ограничивающие количество запросов с одной айпишки, поставил mod_security.Бенчмарк апач в начале итории при полной загрузке клиентами показывал 0.11 запросов в сек
после все проделаного при полной загрузке клиентами 3.5 запросов в сек.
Улучшения на лицо, но задержка осталась.
>ой забыл добавить.
>прикрутил к ПХП оптимайзер, поставил апач модули для защиты от флуда и
>ДОС атак, ограничивающие количество запросов с одной айпишки, поставил mod_security.
>
Явно погорячился ;) кстати, и нагрузку на сервер увеличил ;)
>Бенчмарк апач в начале итории при полной загрузке клиентами показывал 0.11 запросов
>в сек
С какими параметрами запускал?
---
Недостаточно данных, все "общий треп". Особо умилило 371 процесс по ps ax. А mod_status пользовать не пробовал? а что те top показывает - откуда load берется? или load нормальный, а у тебя php скрипты тормозят?
>Явно погорячился ;) кстати, и нагрузку на сервер увеличил ;)
может и погорячился>С какими параметрами запускал?
без параметров
>---
>Недостаточно данных, все "общий треп". Особо умилило 371 процесс по ps ax.
как один из вариантов диагностики почему нет>А mod_status пользовать не пробовал? а что те top показывает -
>откуда load берется? или load нормальный, а у тебя php скрипты
>тормозят?
нагрузки нет
load averages: 0.55, 0.34, 0.28
Swap: 2048M Total, 164K Used, 2048M Freemod_status ничего не показывает.
после apachectl status просто висит, завершаю по ctrl+c
>mod_status ничего не показывает.
>после apachectl status просто висит, завершаю по ctrl+cуже сделал что работает mod_status
жду когда появтся задержки
>>mod_status ничего не показывает.
>>после apachectl status просто висит, завершаю по ctrl+c
>
>уже сделал что работает mod_status
>жду когда появтся задержкиБыла подобная ситуация, решил её в двумя вещами:
1) fastcgi - боюсь вам не подойдёт
2) MaxClients = 512
>>mod_status ничего не показывает.
>>после apachectl status просто висит, завершаю по ctrl+c
>
>уже сделал что работает mod_status
>жду когда появтся задержкину вот и наступала эта ситуация
вот какая картина
Server Version: Apache/1.3.37 (Unix) PHP/4.4.6 with Suhosin-Patch
Server Built: Mar 19 2007 07:58:58
Current Time: Wednesday, 21-Mar-2007 08:07:13 CST
Restart Time: Wednesday, 21-Mar-2007 07:11:33 CST
Parent Server Generation: 0
Server uptime: 55 minutes 40 seconds
Total accesses: 6623 - Total Traffic: 24.9 MB
CPU Usage: u7.8125 s9.73438 cu0 cs0 - .525% CPU load
1.98 requests/sec - 7.6 kB/second - 3946 B/request
300 requests currently being processed, 0 idle serversWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW....................
................................................................
................................................................
................................................................Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"L" Logging, "G" Gracefully finishing, "." Open slot with no current processто о чем я говрил, все 300 клиентов заняты.
поставил параллельно второй сервер, с такой же конфигурацие и все работает.
Проблемы явно в железе.
Причем этот сервер уже форматировали под ноль и ставили чистую систему.Что это может быть? Сетевая? Память?
может апач кривой ?
процессы грохает медленнее чем они отваливаются ?
>может апач кривой ?
>процессы грохает медленнее чем они отваливаются ?да он их не грохает.
сейчас на сервер никто не ходит а картина в точности такая как и была 21 марта.
насчет кривизни апача. сомнительно потому что, во-первых, пробовали 1.3.33,34,37 апач, а во-вторых, эта же версия стоит на том серваке который сейчас работает вместо глючного и все летает.
может быть уменьшить keepalivetimeout
>может быть уменьшить keepalivetimeoutА еще ограничить на файерволе количество коннектов с одного IP!
И проверь sockstat | grep httpd - один-ли ip наворачивает такое количество коннектов, если так, то это synflood атака на апач (см список проблем с безопасностью apache от 30 мая здесь на сайте)!
думаю, что смело можно ставить nginx фронтомбольшинство процессов апача у Вас просто отдают контент; пока контент до клиента дойдет, апач просто прокуривает, а остальные запросы крутятся в очереди.
отдайте задачу отдавания контента nginx-у, а апач пусть только работой занимается )
mod_proxy, конечно хорошо, но несравним
да, еще
обязатально отключите KeepAlive (хотя при наличии жинкса можно и поэксперементить)
Пока эти процессы ждут окончания времени кипалайва (то есть нихрена не делают), вам соответственно недоступна часть пула процессов для свезеподключившихся клиентов.Для жинкса вероятно вам будет достаточно запускать в апаче десяток процессов.
кроме того,
дабы на бекэнде у вас нормально отрабатывались ip клиентов, подключите к апачу mod_rpatf
и на жинксе в разделе location
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;Также советую на жинксе включить компрессию отдаваемого контента