Ares: Apache 1.3.33 и страшные страшные тормоза!!

26 сообщений / 0 new
Последнее сообщение
Гость
Ares: Apache 1.3.33 и страшные страшные тормоза!!

Вобщем стоит сабж на сервере(P4 Xeon) раздает php. Стал замечать, что притормаживает сервер, причем контент формируется php за доли секунды, а отдается секунд 10.!! Нагрузка на сервер примерно 20-30 запросов в секунду в пики доходит до 100-110 запросов в секунду. httpd.conf уже запарился править, с настройками играть! Лучше не становится.

Подскажите куда копать.

Утилита тор возвращает:
top - 16:06:11 up 4 days, 17:50, 3 users, load average: 72.85, 71.71, 29.74
Tasks: 117 total, 2 running, 114 sleeping, 0 stopped, 1 zombie
Cpu0 : 25.2% us, 4.9% sy, 0.0% ni, 51.6% id, 18.2% wa, 0.1% hi, 0.0% si
Cpu1 : 26.2% us, 6.3% sy, 0.0% ni, 52.9% id, 14.4% wa, 0.2% hi, 0.0% si
Mem: 1034640k total, 177532k used, 857108k free, 8884k buffers
Swap: 2104496k total, 32064k used, 2072432k free, 47464k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
23220 nobody 15 0 16896 7100 3492 S 11.3 0.7 0:01.24 httpd
23270 nobody 15 0 16468 6504 3348 S 8.9 0.6 0:00.41 httpd
23260 nobody 15 0 15240 5344 3424 S 7.3 0.5 0:00.22 httpd
23223 nobody 15 0 15512 5588 3384 S 4.9 0.5 0:00.44 httpd

Nick
Не в сети
Зарегистрирован: 20/09/2010

HostnameLookups не включен?
manual/misc/perf-tuning.html читали?
Что за скрипты? Как определили, что контент формируется за доли секунды?

Ares (не проверено)

HostnameLookups выключен, скрипты - www.smski.ru
как определил, написал функцию которая сохраняет в массив время между ее вызовами (ее вызываю несколько раз на протяжении скрипта) и потом в конце скрипта делаю вывод всего массива, страница получается браузером на порядок дольше чем формируется контент

Ares (не проверено)

Подсчитал сколько за сутки обрабатывает страниц Apache! Он за сутки отдает чуть больше 1 000 000 страниц...неужели это его предел?!

Nick
Не в сети
Зарегистрирован: 20/09/2010

В прямых руках -- не предел.

Это ваш сервер или хостера?

<span class='smallblacktext'>[ Редактирование 26.05.2006 - 10:50:43 ]</span>

Ares (не проверено)

Наш сервер...спасибо за прямые руки)) Может подскажете в чем тогда проблема может быть...

Ares (не проверено)

[blockquote]You can, and should, control the MaxClients setting so that your server does not spawn so many children it starts swapping. The procedure for doing this is simple: determine the size of your average Apache process, by looking at your process list via a tool such as top, and divide this into your total available memory, leaving some room for other processes.[/blockquote]

Оперативки 1Gb, один процесс занимает около 4Kb, почему задействуется только до 200Mb? Итого у меня может быть(судя по вышесказанному) MaxClients = 70...
Может оперативку увеличить? Или как заставить Apache загребать под себя больше оперативки?
<span class='smallblacktext'>[ Редактирование 26.05.2006 - 12:48:36 ]</span>

Nick
Не в сети
Зарегистрирован: 20/09/2010

1. Процессов, занимающих 4 кб, не бывает. Это 4 MB.
2. "Заставить загребать" нельзя. Это Apache, это не Oracle.
3. При чем тут вообще оперативка? У вас там с сетевой платой все в порядке? А скорость исх. канала какая? Это не ADSL, я надеюсь?

Ares (не проверено)

1. Извиняюсь опечатался 4 MB;
2 . Понял(жаль)
3. Я конечно понимаю "руки кривые" но не настолько))) оперативка при том что сервер начинает свапится , что ну ООчень нежелательно, судя из manual/misc/perf-tuning.html (на который кстати Вы и указывали). Это не ADSL - сервера стоят в Equant (Москва). С сетевой вроде все нормально.

Но тут вот какая штука происходит, если указать MaxClients до 100, сервер не свопится, если увеличивать этот параметр сервак начинает свопится и растет load average. При этом,судя из статистики, сервер как обрабатывал одновременно до 100-110 коннектов так и обрабатывает, т.е. увеличение MaxClients реально только увеличивает нагрузку на сервер, но ни как не позволяет обработать больше коннектов(тобишь пользователей)..не вижу другого выхода как ставить фронтенд-сервер и (может несколько) бэкенд-сервер(ов).

Если есть другие идеи буду рад выслушать!

edge (не проверено)

1) Попробуй 2 версию апача поставить
2) Хорошо бы вывод netstat -an посмотреть. Может стоит оптимизировать настройки стэка TCP/IP?
http://www.securitylab.ru/analytics/243414.php
http://www.opennet.ru/tips/info/273.shtml
Но в принципе это последний метод наверное, который надо пробовать..
3) 100 запросов в сек. это достаточно серьезная нагрузка на апача, и наверное он так и будет себя вести я думаю. Наверное стоит задуматься об апгейде железа? Вот на всякий случай дополнительная инфа о настройке апача:
http://www.opennet.ru/opennews/art.shtml?num=1312
Еще вариант, если собран модульно, наверное стоит пересобрать статически.
4) SQL сервер какой-нибудь не стоит? Может дело не в апаче вовсе?

Ares (не проверено)

1. Версия 2 apache если собрана со всеми своими "достоинствами" не работает с gd((( я бы давно на нее перешел еслиб в пректе не использовался gd.
2. netstat -an (кусок)
***************************
tcp 0 0 212.176.118.149:80 217.15.132.254:4312 TIME_WAIT
tcp 0 0 212.176.118.149:80 85.140.17.235:3802 TIME_WAIT
tcp 0 0 212.176.118.149:80 84.17.29.146:1330 TIME_WAIT
tcp 0 0 212.176.118.149:80 213.135.140.69:2589 TIME_WAIT
tcp 0 0 212.176.118.149:80 82.142.177.5:22633 TIME_WAIT
tcp 0 0 212.176.118.149:80 62.117.69.170:52022 TIME_WAIT
tcp 0 8760 212.176.118.149:80 213.145.38.245:3566 ESTABLISHED
tcp 0 0 212.176.118.149:80 217.70.111.192:1093 TIME_WAIT
tcp 0 0 212.176.118.149:80 217.15.132.254:4313 TIME_WAIT
tcp 0 0 212.176.118.149:80 80.82.164.130:62936 TIME_WAIT
tcp 0 0 :::22 :::* LISTEN
tcp 0 10752 ::ffff:212.176.118.149:22 ::ffff:62.183.32.218:61088 ESTABLISHED
udp 0 0 0.0.0.0:7938 0.0.0.0:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 10 [ ] DGRAM 5127 /dev/log
unix 2 [ ACC ] STREAM LISTENING 5418 /usr/local/proftpd-1.2.10/var/proftpd/proftpd.sock
unix 2 [ ] DGRAM 5722 @/var/run/hal/hotplug_socket
unix 2 [ ACC ] STREAM LISTENING 5401 /var/run/acpid.socket
unix 2 [ ] DGRAM 3097 @udevd
unix 2 [ ACC ] STREAM LISTENING 5675 /var/run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 5624 /dev/gpmctl
unix 3 [ ] STREAM CONNECTED 33304084
unix 3 [ ] STREAM CONNECTED 33304083
unix 3 [ ] STREAM CONNECTED 5721 /var/run/dbus/system_bus_socket
unix 3 [ ] STREAM CONNECTED 5720
unix 2 [ ] DGRAM 5693
unix 3 [ ] STREAM CONNECTED 5678
unix 3 [ ] STREAM CONNECTED 5677
unix 2 [ ] DGRAM 5606
unix 2 [ ] DGRAM 5573
unix 2 [ ] DGRAM 5556
unix 2 [ ] DGRAM 5537
unix 2 [ ] DGRAM 5474
unix 2 [ ] DGRAM 5420
unix 2 [ ] DGRAM 5135
3. Apache тюнинговал уже и по этой статье и по многим другим(в общем везде одно и тоже). Т.е. Apache не может обслужить больше 100 человек одновременно? Мне кажется, что он может и больше...может быть ошибаюсь. php подключен как модуль, что даст его пересборка статически?
4. Стоит второй сервер с PostgreSQL, но он отдает запрашиваемый контент за доли секунды, когда как страница приходит на браузер через несколько секунд только. Может много времени проходит от запроса браузера до установления соединения? а контент уже быстро отдается...

Nick
Не в сети
Зарегистрирован: 20/09/2010

Apache? С gd? Вы хотели сказать, PHP? Апачу-то зачем gd?

Естественно, для работы с PHP 2-й Apache нужно ставить с prefork, а не с worker. Это везде написано. У меня Apache 2 работает с PHP со всеми нужными модулями, gd в том числе.

Про 100 клиентов -- это курам не смех. Сервер, облуживающий больше 70% сайтов мира, не тянет больше 100 клиентов? Думайте, что говорите.

Ares (не проверено)

Так я про тоже! Так почему тогда не тянет больше коннектов?(
Да, естесственно php работает с gd, так вот я читал(сам не ставил) что для работы php с gd(и еще там несколькими модулями) нужно чтоб apache был отконфигурирован с --with-mpm=prefork. Но люди отзывались, что такая конфигурация работает ни чуть не лучше чем apache 1.3....
2Nick у Вас какие впечатления на сей счет? Стоит ли переходить на Apache2.*?

edge (не проверено)

Ну в общем вывод такой. Проблема требует всестороннего изучения, то есть фактически без того, чтобы самому посмотреть на эти тормоза, потестировать и попробовать своим набором команд для выявления причины, никто ничего тут тебе не подскажет. А по этим отрывкам вывода netstat'a и примерном описании ситуации, вряд ли что-то починим..

Ares (не проверено)

2edge Вы советовали поставить вторую версию Apache, на сколько это может поправить ситуацию?

edge (не проверено)

Угадать что-ли? Ну попробую.
Возможно сборка 2 апача будет удачнее 1. Ведь Вы до сих пор даже свой дистрибутив не назвали. Я так мыслю ставится все из стандартной поставки какого-то дистрибутива, а потом что-то рулится в конфигах, и на этом точка. Я предложил попробовать удалить неиспользуемые модули и собрать остальное статически. Вы этого не сделали, но пытаетесь теперь поймать меня на слове. Если не хотите экспериментов, то какого совета вы еще ждете? Если есть проблема, надо пробовать ее решать всеми доступными способами. И если установка 2 апача в вашем случае возможно решит проблему, я бы прежде это попробовал. Почему это должно произойти я не знаю, но если есть доля вероятности, что это поможет, то я бы попробовал. Дискутировать на тему apache1 vs apache2 я не намерен, потому что не владею вопросом. Этим вопросом владеют только разработчики апача, которые знают различия между 2-мя ветками. Остальные - теоретики..

[ Редактирование 29.05.2006 - 22:15:47 ]

Ares (не проверено)

Гадать не нужно, я просто спросил! Как я могу назвать дистрибутив если там все самосборное, ну скажем когдато это был RHEL...вариант "поставить все что идет с дистрибутивом а потом разрулить в конфах" не есть хороший. Я давно уже удалил неиспользуемые модули(о чем и писал) единственное, пока не перекомпилил статикой, но этому есть обьяснение(физически не смог). Еслиб я не хотел экспериментировать я б наверное не сидел бы в линуксе)) Тем не менее спасибо за советы...

Nick
Не в сети
Зарегистрирован: 20/09/2010

Ставить Apache 2 имеет смысл. Изменения там не только в поддержке многопоточности.

Ares (не проверено)

Хм прикол!)
Откомпили Apache 2.2 as is(как есть) чтоб посмотреть какие модули ставятся по-умолчанию. Делаю httpd -l показывает кучу модулей и среди них core.c и http_core.c. Смотрим описание:
1. Core Apache HTTP Server features that are always available
2. http_core is the base module of Apache, in which all core functionality is implemented
и список директив во многом схож!
Так какой же модуль используется в Apache 2.2?

Nick
Не в сети
Зарегистрирован: 20/09/2010

Это одно и то же. Не на то смотрите.

Ares (не проверено)

Дык понятно что одно и тоже...зачем 2 практически одинаковых модуля подключать..это не понятно

Ares (не проверено)

2Nick При всем моем уважении к Вам, посмотрите http://www.trinity.su/news/280.htm
Это по-поводу "Про 100 клиентов -- это курам не смех. Сервер, облуживающий больше 70% сайтов мира, не тянет больше 100 клиентов? Думайте, что говорите."

Nick
Не в сети
Зарегистрирован: 20/09/2010

И что? Во-первых, SLES 9 стар. Во-вторых, MySQL (с MyISAM) использует table-level locking и не годится для сколько-нибудь серьезной нагрузки. В-третьих, даже при всем при этом оно тянет больше 100 клиентов.

Что дальше?

Ares (не проверено)

ага больше)))300! после 300 начинает падать производительность...не думаю что это из за базы данных, у меня наблюдается аналогичная ситуация до 200-250 клиентов все нормально, после - начинаются тормоза! База данных(PostgreSQL) кроме сайта еще выполняет определенные работы, назависящие от сайта, так она ни когда не свопится и загрузка ни когда не увеличивается выше нормы! Так что косяк в Apache и база тут не при чем! На счет старого или нового дистра, не всегда есть возможность откомпилить ядро самому или поставить дистр на свое усмотрение. Доблестная сертификация по системе "Связь" не приемлет на серваках другие дистры от заявленных в сертификате и ни дай боже ядро откомпилить(хотя имхо полный бред)! Собственно сами коллакейтеры и не разрешают это сделать(

Nick
Не в сети
Зарегистрирован: 20/09/2010

Ares:

Насчет ядра им не обязательно все рассказывать. А в остальном нужен Apache 2.2 и тюнинг. Сайт коммерческий? Обращайтесь, координаты здесь: http://www.sbin.org/?page=about/contact&lang=ru

Ares (не проверено)

К сожелению есть опасность схлопотать по попке от начальства за самовольничесиво с ядром(читай с лицензией, 3000$ стоит как никак)! Apache 2.2 сейчас вовсю тестирую с разными параметрами сборки...если не получится обращусь обязательно!))

RSS-материал