Где еще поискать узкие места?

izx

Новичок
Где еще поискать узкие места?

Была у меня проблема.
Иногда в дневные часы, когда посещаемость сайта максимальная он начинал долго открываться.

Причем первое обращение к сайту происходило 10 – 15 секунд.
(Долгим было первое обращение к любой странице сайта даже по IP адресу)
Следующие уже происходили быстрее. 3-5 секунд.
В вечернее и ночное время сайт открывался мгновенно.

Я изменил значение параметра KeepAliveTimeout в настройках Apache
Вместо 15 секунд поставил 3 секунды.
Все остальные настройки Apache оставлены по умолчанию.
После этого торможения уменьшились. Страницы в дневное время открываются 2-5 секунд.
И первое обращение перестало быть слишком долгим.

Вот что сказано про эту опцию в документации Apache
-------
The number of seconds Apache will wait for a subsequent request before closing the connection. Once a request has been received, the timeout value specified by the Timeout directive applies.
Setting KeepAliveTimeout to a high value may cause performance problems in heavily loaded servers. The higher the timeout, the more server processes will be kept occupied waiting on connections with idle clients.
-------------
Перевод.>>>
---------------
Количество секунд, которое Apache ждет последовательность запросов до закрытия соединения. . . .
Установка KeepAliveTimeout в большое значение может вызвать проблем на тяжело загруженных серверах. При более высоком значении таймаута больше серверных процессов держаться и ожидают соединение с неактивным клиентом.
----------------

У меня вопрос к знатокам Apache и Linux.
Какие еще настойки можно попробовать сделать для ускорения работы сайта?
И где еще можно поискать узкие места?

Вот что выдает команда Vmstat в периоды наибольшей загруженности.

procs memory swap io system cpu
r b w swpd free buff cache si so bi bo in cs us sy id
0 0 0 0 220816 60588 532948 0 0 2 84 196 207 3 3 95
0 0 0 0 221280 60588 532936 0 0 0 224 420 409 1 4 95
0 0 0 0 221332 60588 532936 0 0 0 0 483 689 6 3 91
0 0 0 0 221676 60588 532940 0 0 0 0 515 488 2 1 97
0 0 1 0 221076 60588 532944 0 0 0 604 545 574 4 2 94
0 0 0 0 221796 60588 532944 0 0 0 380 568 701 3 7 90
0 0 0 0 222280 60588 532948 0 0 0 0 495 555 3 1 96
0 0 0 0 222748 60588 532956 0 0 0 0 398 460 1 2 97

По этим данным 95% ресурсов процессора свободны и свап не используется. Да и память свободная еще есть.
Оптимизация PHP скриптов и запросов к MySQL уже проведены.
И на мой взгляд довольно не плохо.

Параметры сайта.
300 000 хитов в сутки 8 000 хостов в сутки.
300 000 Гб трафика в месяц.
Стоит Linux 2.4.23, Apache 1.3.29 + PHP 4.3.4 как модуль + MySQL 4.0.16
Сайт представляет из себя форум и генирится динамически с помощью PHP и MySQL

Параметры сервера (стоит в дата центре).
P4 2.8 Гц, 1 Гб RAM, винт IDE. Сетевая карта 100 Мбит
На сервере крутится только один сайт.
 

voodoo

Новичок
а что с MaxClients?
Кстати, можно посмотреть на server-status и узнать чем занимаются апачевые треды.

Еще вариант ускорения -- вынести все картинки (и другую статику) и обслуживать отдельным сервером (напр, mathopd или thttpd) и оставить тяжелому апачу с пхп только пхпшные страницы. и кипалив у него вообще выключить.
 

AndreyS

Guest
1.
300 000 Гб трафика в месяц
300 Терабайт на форуме с одной машины - фантастика :) Столько даже датацентр не выдаст.

2. Посмотри netstat-ом. Обычно хорошо видно когда не хватает сессий Апача для обслуживания запросов. Подними MaxClients до 200-230, на большее imho памяти не хватит.
 

izx

Новичок
Originally posted by AndreyS
300 Терабайт на форуме с одной машины - фантастика :) Столько даже датацентр не выдаст.
Извиняюсь опечатка.
Трафик 300 Гб в месяц.

Originally posted by AndreyS
2. Посмотри netstat-ом. Обычно хорошо видно когда не хватает сессий Апача для обслуживания запросов. Подними MaxClients до 200-230, на большее imho памяти не хватит.
Запустил я netstat. Что то он выдает.
Но не знаю я как толковать эти результаты.
И как по ним определить хватает ли сесий Апача.
Может подскажите?

а MaxClients стоит в 250.
 

Фанат

oncle terrible
Команда форума
совсем недавно админ запостил статью Мошкова
Как раз по твоей тематике.
http://phpclub.ru/talk/showthread.php?s=&threadid=45208

ЗЫ. молодец, что пошел по правильному пути :)
 

si

Administrator
http://httpd.apache.org/docs/misc/perf-tuning.html
все эти танцы с бубном ничто, по сравнению с тормозами от РНР и MySQL.

прежде всего надо поставить како-нибуть PHP акселератор
 

si

Administrator
KeepAlive off однозначно, от него толку практически нет.
 

McUrex_

ururunet
Originally posted by si
все эти танцы с бубном ничто, по сравнению с тормозами от РНР и MySQL.

прежде всего надо поставить како-нибуть PHP акселератор
Так, на секундочку:
Эти "танцы с бубном" официальный ман по перфомансу от создателя продукта - ?!?!? :))
 

si

Administrator
Эти "танцы с бубном" официальный ман по перфомансу от создателя продукта - ?!?!? :))
эти "танцы с бубном" экономят несколько системных вызовов, и имеют смысл если апача отдает статик контент в огромных количествах (миллионы хитов), если ты посмотришь сколько нужных и не очень системных вызовов происходит при запуске PHP ты поймешь почему я назвал это "танцами с бубном"/ а статик лучше тдавать boa, mathopd, ереезв как верно замедил Саша.
 

Фанат

oncle terrible
Команда форума
si
а как ты объяснишь странности с первой задержкой?
 

izx

Новичок
Причины большой задержки первого обращения мне вроде бы стали ясны.

Задержка в 10-15 секунд возникает, если я ставлю значения по умолчанию

KeepAliveTimeout 15
MaxClients 150

При этом команда ps -ef |grep httpd| wc –l
Через минуту работы выдает количество процессов httpd в 150.
И становятся понятны причины торможения – нахватает количества процессов.

Если ставлю
KeepAliveTimeout 15
MaxClients 255
То через пару минут команда ps -ef |grep httpd| wc –l
выдает количество процессов httpd в 255.
И открытия также происходят с задержкой, но меньшей.

Если ставлю
KeepAliveTimeout 3
MaxClients 255
То команда ps -ef |grep httpd| wc –l
выдает количество процессов httpd около 110
И дальше количество их не увеличивается.
Время открытия страницы 1-2 секунды.

Если ставлю
KeepAlive Off
MaxClients 255
То команда ps -ef |grep httpd| wc –l
выдает количество процессов httpd около 60
Время открытия страницы около 1 - 2 секунды.
Отличий в скорости работы от предыдущего теста не выявлено.

Вывод 1:
Изначальные причины торможения были в ограничении количества процессов MaxClients

Вывод 2:
Работа PHP и MySQL не является узким местом работы сайта,
не смотря на то что сайт генерится полностью динамически.
Потому как команда Top показывает загрузку CPU всего на 5%
 

si

Administrator
Работа PHP и MySQL не является узким местом работы сайта,
работа самого апача тем более не может быть узким местом, он ничего такого ресурсоемкого сам не делает (не должен делать)

поставь KeepAlive Off и радуйся :)
 
Сверху