URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID13
Нить номер: 356
[ Назад ]

Исходное сообщение
"Как повисить скорость реакции апача?"

Отправлено teebot , 16-Мрт-07 11:44 
Здравствуйте.

Вот сижу уже неделю над тем что бы побороть тормоза в апаче.
Моя история такова.
Есть сервер:
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 сек и т.д.

Посоветуйте пожалуйста хоть что нибудь как разгрузить сервер без ущерба для дела и клиентов. Я уже не знаю что читать и куда смотреть.

Пожалуйста помогите. Пожалуйста...!!!


Содержание

Сообщения в этом обсуждении
"Как повисить скорость реакции апача?"
Отправлено teebot , 16-Мрт-07 11:49 
ой забыл добавить.
прикрутил к ПХП оптимайзер, поставил апач модули для защиты от флуда и ДОС атак, ограничивающие количество запросов с одной айпишки, поставил mod_security.

Бенчмарк апач в начале итории при полной загрузке клиентами показывал 0.11 запросов в сек
после все проделаного при полной загрузке клиентами 3.5 запросов в сек.
Улучшения на лицо, но задержка осталась.


"Как повисить скорость реакции апача?"
Отправлено afterstep , 16-Мрт-07 13:27 
>ой забыл добавить.
>прикрутил к ПХП оптимайзер, поставил апач модули для защиты от флуда и
>ДОС атак, ограничивающие количество запросов с одной айпишки, поставил mod_security.
>
Явно погорячился ;) кстати, и нагрузку на сервер увеличил ;)
>Бенчмарк апач в начале итории при полной загрузке клиентами показывал 0.11 запросов
>в сек
С какими параметрами запускал?
---
Недостаточно данных, все "общий треп". Особо умилило 371 процесс по ps ax. А mod_status пользовать не пробовал? а что те top показывает - откуда load берется? или load нормальный, а у тебя php скрипты тормозят?


"Как повисить скорость реакции апача?"
Отправлено teebot , 16-Мрт-07 13:34 
>Явно погорячился ;) кстати, и нагрузку на сервер увеличил ;)
может и погорячился

>С какими параметрами запускал?
без параметров
>---
>Недостаточно данных, все "общий треп". Особо умилило 371 процесс по ps ax.
как один из вариантов диагностики почему нет

>А mod_status пользовать не пробовал? а что те top показывает -
>откуда load берется? или load нормальный, а у тебя php скрипты
>тормозят?
нагрузки нет
load averages:  0.55,  0.34,  0.28
Swap: 2048M Total, 164K Used, 2048M Free

mod_status ничего не показывает.
после apachectl status просто висит, завершаю по ctrl+c



"Как повисить скорость реакции апача?"
Отправлено teebot , 16-Мрт-07 13:55 
>mod_status ничего не показывает.
>после apachectl status просто висит, завершаю по ctrl+c

уже сделал что работает mod_status
жду когда появтся задержки



"Как повисить скорость реакции апача?"
Отправлено alexvs , 16-Мрт-07 16:55 
>>mod_status ничего не показывает.
>>после apachectl status просто висит, завершаю по ctrl+c
>
>уже сделал что работает mod_status
>жду когда появтся задержки

Была подобная ситуация, решил её в двумя вещами:
1) fastcgi - боюсь вам не подойдёт
2) MaxClients = 512


"Как повисить скорость реакции апача?"
Отправлено teebot , 21-Мрт-07 17:16 
>>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 servers

WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
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 клиентов заняты.
поставил параллельно второй сервер, с такой же конфигурацие и все работает.
Проблемы явно в железе.
Причем этот сервер уже форматировали под ноль и ставили чистую систему.

Что это может быть? Сетевая? Память?


"Как повисить скорость реакции апача?"
Отправлено Nikolaev D. JET , 24-Мрт-07 14:56 
может апач кривой ?
процессы грохает медленнее чем они отваливаются ?

"Как повисить скорость реакции апача?"
Отправлено teebot , 26-Мрт-07 10:19 
>может апач кривой ?
>процессы грохает медленнее чем они отваливаются ?

да он их не грохает.
сейчас на сервер никто не ходит а картина в точности такая как и была 21 марта.
насчет кривизни апача. сомнительно потому что, во-первых, пробовали 1.3.33,34,37 апач, а во-вторых, эта же версия стоит на том серваке который сейчас работает вместо глючного и все летает.


"Как повисить скорость реакции апача?"
Отправлено KSasha , 14-Июн-07 18:45 
может быть уменьшить keepalivetimeout

"Как повисить скорость реакции апача?"
Отправлено michelle , 15-Июн-07 21:48 
>может быть уменьшить keepalivetimeout

А еще ограничить на файерволе количество коннектов с одного IP!
И проверь sockstat | grep httpd - один-ли ip наворачивает такое количество коннектов, если так, то это synflood атака на апач (см список проблем с безопасностью apache от 30 мая здесь на сайте)!


"Как повисить скорость реакции апача?"
Отправлено johnjoy , 18-Июн-07 21:36 
думаю, что смело можно ставить nginx фронтом

большинство процессов апача у Вас просто отдают контент; пока контент до клиента дойдет, апач просто прокуривает, а остальные запросы крутятся в очереди.

отдайте задачу отдавания контента nginx-у, а апач пусть только работой занимается )

mod_proxy, конечно хорошо, но несравним


"Как повисить скорость реакции апача?"
Отправлено johnjoy , 18-Июн-07 21:47 
да, еще
обязатально отключите 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;

Также советую на жинксе включить компрессию отдаваемого контента