Тема: Производительность (вероятно, роуты)

Имеем проект, написанный с использованием symfony 1.2. Нагрузка такая, что 8-ядерный сервак может держать не больше 100 клиентов. xdebug+kcachegrind кричат что проблема в классах роутов. app_param_lazy_routes_deserialize включено, но разницы никакой. Самые медленные скрипты sfRoute.class.php и config_core_compile.yml.php, BasePeer.php. Особенно, вызовы sfRoute->MatchUrl, sfRoute->compile. Большинство тормознутых вызовов из других скриптов так или иначе завязаны на роуты, т.е. почти в каждом тормознутом вызове можно встретить дочерний вызов чего-то связанного с роутами. Кроме этих скриптов ещё иногда вырываются вперёд по прожорливости функции стандартной библиотеки PHP. Но это в процентном соотношении - может просто роуты в эти моменты не жрут проц. Пробовал memcached - никакого результата. Пробовал APC - система стала совсем нестабильной, бесконечное обращение к винту.

2

Re: Производительность (вероятно, роуты)

сервак может держать не больше 100 клиентов

это количество одновременных пользователей на сайте?
то что говорят xdebug+kcachegrind, может вообще ниочем существенном не сказать

меня интересуют вопросы
1. Как ведет себя база? т.е, большой ли слоулог, сколько в среднем запросов к базе на страницу? К примеру, сколько запросов на главной?
2. какое минимальное\максимальное время генерации страницы в дев-режиме с отключенным xdebug?
3. сколько памяти у вашего 8миядерного сервака?
4. сайт занимает весь сервер или еще есть на нем проекты?
5. какой у сайта суточный трафик?

3

Re: Производительность (вероятно, роуты)

А что за сайт? Ссылку в студию default/smile.

mad_fashist пишет:

Пробовал APC - система стала совсем нестабильной, бесконечное обращение к винту.

APC помогает очень здорового. А в чем нестабильность его выражается? Есть и другие акселераторы. Рекомендую их заюзать.

Вот тут можно посмотреть наглядно эффект, когда APC включен.
http://tigor.com.ua/blog/2009/12/17/xhp … mparision/

Вопросы:
1) Сайт с динамическим контентом?
2) Кеширование на уровни симфони включено? В частности для Роутинга? Если включено, попробуйте отключить кеширование для роутинга.
3) Вы используете nginx для статики?
4) Количество запросов к БД (Propel/Doctrine?), сколько памяти кушает страничка?

4

Re: Производительность (вероятно, роуты)

хм... что то написать не получается... а ну тест... бла-бла-бла...

5

Re: Производительность (вероятно, роуты)

тут есть проблема с кодом в теле сообщения

6

Re: Производительность (вероятно, роуты)

о! работает! лан, пофлудили и хватит. вчера не работало.
В общем, так:
1. слоулог пуст. вчера в нём что-то было но сегодня он пуст. может меньше памяти забито другим фуфлом. например, вчера у меня висели 2 приостановленных процесса mencoder'a - думаю, они отжирали хорошо.
2. если бы дело было в запросах - ложился бы винт, простаивал проц на i/o-wait и php-cgi (или apache-mod-php) фигурировали бы в списке процессов как не особо тяжелые. А здесь проц жрёт именно php, а винт не загружен - значит, и обращений к базе немного. От каждого открытого окна раз в секунду гоняются около 5-10 запросов к серверной части. раньше каждый из этих запросов плодил на серваке 5 обращений к базе. Теперь эти 5 засунули в 1 запрос. Насколько я понял, результата это особого не дало.
3. тестирую на своём компе под линухой, загрузка от 3-5 процессов по 15-45% от ядра каждый до 90% на одно ядро, в зависимости от того, сколько процессов php-cgi плодится. ядра у меня два, памяти 1 гиг. apc.stat пробовал и вкл и выкл - без разницы.
4. на серваке стоит nginx.
5. памяти на серваке 12 гигов.
6. на серваке кроме этого сайта больше ничего нет.
7. сейчас кроме того что слоулог пуст, ещё и apc не ложит тачку. но прироста производительности по процу ноль. прирост по памяти если и есть - он меня не интересует вобще. Зато обращение к винту при генерации страницы - звиздец полный. вроде как меньше загрузка проца но это всё из-за i/o-wait.
8. wireshark'ом смотрел, сколько запросов на аяксе гоняют аналогичные сайты конкурентов - в несколько раз больше. Клиентов у них уже давно дофига и вряд ли мощнее железо.
9. время генерации страницы пока посмотреть не могу, руки не доходят. Временно забил на оптимизацию и занимаюсь изучением самой симфонии.

7

Re: Производительность (вероятно, роуты)

Кстати, я отключил добавление в слоулог запросов к непроиндексированным таблицам - может, поэтому он пуст. Вчера там летали запросы выборок из 7-9 таблиц. В общем-то, для мускуля это довольно много, но опять таки: проц не простаивает и его жрёт не мускуль, а пхп.

8

Re: Производительность (вероятно, роуты)

В общем, вопрос можно конкретно округлить:
"Копать в сторону проекта или в сторону симфонии?"
Много просто сообщений о проблемах с производительностью конкретно версии 1.2. Если бы не этот факт, вопрос бы и не поднимался.

9

Re: Производительность (вероятно, роуты)

9. время генерации страницы пока посмотреть не могу, руки не доходят.

так в дев-режиме пустите, там все видно

ну или давайте ссылку на пациента в личку

Много просто сообщений о проблемах с производительностью конкретно версии 1.2.

да, там медленный роутинг
на 1.3 по обещаниям все исправлено, но протестировать это возможности нет возможности у меня, гарантий не дам

но чтобы настолько он валил сайт, такое я вижу впервые
- сколько там явных роутов у вас в проекте?
- РНР работает как fastCGI или как модуль апача?

10

Re: Производительность (вероятно, роуты)

Просто настройки базы для dev-режима другие. а я в симфонии не очень разбираюсь. Но уже сделал. Время генерации - 780ms. Кстати, в дев-режиме нагрузка в 2-3 раза меньше. Это нормально или мы близимся к разгадке? Она всё равно велика - 40-60 процентов одно ядро. Сервак-то помощнее моего ноута, но всё равно получится что он выдержит, скажем, не 100 клиентов, а 200... Мало. В последствии вероятно буду переписывать всё на 1.4. Но пока необходимо стартонуть чтобы было что кушать в время переписывания. Плюс не получилось обновить до 1.3. Каких-то файлов не хватало *.class.php.

11

Re: Производительность (вероятно, роуты)

Роуты в симфонии - это всего лишь интерпретации для clean url? И чем явные отличаются от неявных?

Когда php работает как модуль апача (на серваке так) - плодятся процессы апача
когда lighttpd+fastcgi (у меня так) -плодятся соответственно процессы php5-cgi.
но разницы, по ходу, нет.
кстати, может это важно: на локалхосте не удалось добиться стабильной работы апача+mod_php. он выдавал не весь контент страницы. Попробовал всякие там max_requests_per_child и т.д. привести в соответствие с серверными настройками - нифига из этого не вышло.

12

Re: Производительность (вероятно, роуты)

Ага, с приростом производительности отбой - это просто xdebug отключен

13

Re: Производительность (вероятно, роуты)

mad_fashist пишет:

Ага, с приростом производительности отбой - это просто xdebug отключен

а xdebug тут причем?

14

Re: Производительность (вероятно, роуты)

Ага, с приростом производительности отбой - это просто xdebug отключен

ой, ой, вы включили xdebug на продакшыне чтоли?
отключайте срочно

15

Re: Производительность (вероятно, роуты)

Не  страшно, всё на локалхосте. Мой локалхост - что хочу, то и делаю default/smile А сервак пока не в моей власти. Пока переносил, у меня вобще апач в месте с lighttpd висели, разные порты только слушали default/smile В общем, я так понял, что если нагрузка НАСТОЛЬКО велика - fw здесь не при чём и нужно ковырять сам проект? С этой целью сейчас страшными темпами штудирую маны по симфонии. Всё равно потом куча доработок будет.

16

Re: Производительность (вероятно, роуты)

fw здесь не при чём и нужно ковырять сам проект?

на моем сервере 4 проекта с сумарным трафиком в 20000 в сутки и 400-800 одновременных пользователей на сайте

время генерации 120-600 мс

оптимизированы частично

так что вероятность того что лагает не симфа как фреймворк а сам проект достаточно велика

17

Re: Производительность (вероятно, роуты)

Понял. Спасибо огромное, это уже очень важно. Значит, буду искать лажу в проекте.

18

Re: Производительность (вероятно, роуты)

Пробуйте отключить кеш роутов совсем. У нас падала система из-за разрастания кеша.
factories.ym:

all:
  routing:
    class: sfPatternRouting
    param:
      cache: null

19

Re: Производительность (вероятно, роуты)

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

20

Re: Производительность (вероятно, роуты)

Роуты могут действительно создавать проблемы, если сайт очень динамичный, решения:

- отключить кеширование для роутингов
- и ещё присмотреться к параметрам: lazy_routes_deserialize и lookup_cache_dedicated_keys

К советам pilot советую присмотреться, т.к. порядок тоже играет значение

Ну и не забываем про кеширование, если позволяет сайт, то очень помогает nginx