LINUX.ORG.RU

We need a plan...


0

0

Короче говоря, это вопрос скорее к тем, кто с Symfony разбирался и для кого профилировка — не пустой звук.

Задача — просимулировать на локалхосте несколько тысяч пользователей, которые по сайту ходят, формы заполняют и отправляют, ищут что-то — короче говоря, серфят как обычно. При этом php-apd должен собирать профилирующие данные. И так несколько часов.

В конце мы должны получить данные о том, в каких методах мы застревали дольше всего, какие вызывались чаще всего, а от ORM должна быть такая же сводка о запросах к БД.

В идеале хорошо, чтобы запускалась песочница с настроенным apd и, возможно, профилятором для MySQL, буде понадобится, запускала бенчмарк, после чего можно было бы уйти на пару часов выпить чаю. Опосля получить сводку со всеми интересующими деталями.

Цель — рефакторинг и перепись кода, являющегося воплощением Летающего Макаронного Монстра, с тем, чтобы он использовал православный фреймворк вместо ничего и чтобы окроме 100000 нынешних юзеров он выдержал хотя бы миллион.

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

★★★★★

> Задача — просимулировать на локалхосте несколько тысяч пользователей, которые по сайту ходят, формы заполняют и отправляют, ищут что-то — короче говоря, серфят как обычно. При этом php-apd должен собирать профилирующие данные. И так несколько часов.

ab для создания нагрузки пойдет или написать самописного бота, который будет ходить по ссылкам. Первого варианта мне лично хватило, что бы понять что все гавно :)

> Цель — рефакторинг и перепись кода, являющегося воплощением Летающего Макаронного Монстра, с тем, чтобы он использовал православный фреймворк вместо ничего и чтобы окроме 100000 нынешних юзеров он выдержал хотя бы миллион.

Самое узкое место, это СУБД. Попробуйте снизить число запросов каким-нить memcached.

phasma ★☆
()
Ответ на: комментарий от phasma

>Самое узкое место, это СУБД. Попробуйте снизить число запросов каким-нить memcached.

Ещё бывает полезно правильно заиспользовать HTTP-шное кеширование + реверс прокси перед сервером.

WFrag ★★★★
()
Ответ на: комментарий от phasma

> Самое узкое место, это СУБД. Попробуйте снизить число запросов каким-нить memcached.

Там сейчас так и делают. Оно все равно не помогает, пара тысяч юзеров тусит и сервер встает в коленно-локтевую. Да-да, nginx там тоже есть.

Правда, я еще прозреваю, что там MyISAM... Кхе-кхе. Сегодня буду посмотреть, мне соизволят слить пару гигабайт макаронного кода и 10 гиг базы данных. Надо сделать, чтобы оно еще полгодика продышало, пока новая версия синхронизируется по фичам с текущей.

Новую версию, ввиду геморройности, думается делать с применением symfony, но не хочется влететь с масштабируемостью, затем и вопрос о песочнице, чтобы вопросы решать вовремя.

shimon ★★★★★
() автор топика
Ответ на: комментарий от shimon

> Да-да, nginx там тоже есть.

nginx не панацея от всего, его тоже нужно правильно впихнуть :) А то пополните ряды "рунета" с ошибкой бекэнда.

phasma ★☆
()
Ответ на: комментарий от phasma

В данном случае — уанета.

Хуже всего то, что девелоперы днями них...я не могут сделать — mrtg показывает, что жёёёппа и карауууул, а админ, неадекват редкостный, не хочет даже шелла дать, чтоб посмотреть, на чем там мускул чихает так сильно.

Вчера он меня убеждал, что скачивать код через FTP, пара гигабайт кучей махоньких файликов — это так надо. ssh user@воттуда tar cf - /htdocs | tar xf - типа уже не труЪ. Сам он вендузятник и бздун, двойной диагноз.

Я не стал пререкаться, потому как недавно там работаю.

Шелл не дает, потому что типа не секьюрно. Конечно же... А то, что контора в центре города, вся ее локалка — открытое вифи, лови траффик-не хочу — это пипец как секьюрно.

shimon ★★★★★
() автор топика

Полезная инфа по твоей теме тут: http://talks.php.net/show/froscon08 там после вводных разделов Расмсус предлагает ряд полезных подходов. Обрати внимание насчет производительности фреймворков в конце презентации.

Исходя из этих рекомендаций можно добиться примерно следующего прироста: 100-150 запросов/сек (360 тыс. хитов в час) 600 запросов в секунду - предельный минимум скриптинга на странице (2 лимона хитов в час)

Реально известные фреймворки делают 20-70 запросов в секунду с "легкой" начинкой страницы. Так что для "лимона хитов" требуется выкинуть все кроме статики...

anonymous
()
Ответ на: комментарий от anonymous

Лимон хитов не нужен. Нужен лимон зарегенных юзеров с учетом того, что одновременно хотеть чего-то будет сотая их часть. Обычно максимум одновременных пользователей составляет десятую часть ззарегистрированных, а ломануться одновременно может максимум десятая часть этой десятой части. Плюс еще оверхед из анонимусов, но на том ресурсе большинство трудоемких сервисов предполагает регистрацию.

Лимон хитов в секунду означает, что зарегенных будет раз эдак в сто больше. У нас и населения столько нет. :)

shimon ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Хм. Выходит, symfony проигрывает голому PHP в 6 раз; это не столь большая цена.

В лучшие времена нагрузка составляла где-то 5 хитов в секунду. Голый контроллер Symfony дает чуть более сотни хитов. Даже если изощренная бизнес-логика стормозит показатели в 10 раз (не забываем еще YSlow), то о такой производительности сейчас можно только мечтать.

Кстати, господа, как вам база данных — 155 табличек и все в MyISAM?

shimon ★★★★★
() автор топика
Ответ на: комментарий от shimon

Запас прочности конечно не помешает. Но для 10 тыс. хитов в час тебе нужно выйти на показатель: Transaction rate: 3 trans/sec + трехкратный запас. Тут вообще практически ничего не надо оптимизировать тогда :)

Kachegrind покажет тебе где узкие места в движке, незабудь только отрубить отладочные флаги потом

общие меры: (могут всплыть баги прикладного кода) -APC дает неплохую оптимизацию -вместо require_once/include_once использовать include/require везде где это возможно -не использовать PEAR или переписывать -ну и т.д. :)

anonymous
()

а что, для пыха нет порта WWW::Mechanize? o_O

в руби дофига нормальных скраперов - hpricot, mechanize, scrubyt, scrapi. умеют ходить по ссылкам, выбирать элементы по xpath или css, заполнять формы, некоторые вроде даже картинки страницы результата с умной подсветкой нужных частей делать могли. не верю что для пыха не понаписывали как минимум аналогичного.

volh ★★
()

того кто ab советует сразу отправлять в сад. из коммерческих тулов самый популярный - HP LoadRunner, правда зараза дорогой и мне не нравится. я пользуюсь уже полгода jakarta jmeter в пинципе все устраивает если разобраться, за исключением того что в нем условные переходы есть, но реализованы как-то безумно. При нагрузочных тестированиях пойти попить чаю не получится принципиально, поскольку там может сглюкнуть что-то (например будет показываться пустая страница) и результаты в итоге будут левыми, а проверять получаемый контент страниц это сродни функциональному тестированию, а не нагрузочному. А вообще для начала вам нужно по крайней мере понять что пользователи вообще делают на сайте, т.е. для начала включить какой-нибудь юзер-трекинг и смотреть статистику в разрезе сессий, тестировать каждую компоненту в отдельности вообще никакого смысла нет. Да и вообще использование ORM для нагруженных систем как-то не подходит: оно для програмистов как-то выглядит все из себя объектно-ориентированное, а вот что оно с базой делает...

borisych ★★★★★
()
Ответ на: комментарий от borisych

> Да и вообще использование ORM для нагруженных систем как-то не подходит: оно для програмистов как-то выглядит все из себя объектно-ориентированное, а вот что оно с базой делает...

сходи это какому-нить скайпу расскажи :)

> того кто ab советует сразу отправлять в сад. из коммерческих тулов самый популярный - HP LoadRunner


ПХП Головного Мозга ? :)

phasma ★☆
()
Ответ на: комментарий от phasma

>сходи это какому-нить скайпу расскажи :)

ага. у меня тут сайтик медленно работает, что делать? вот вам исходники БД - пилите.

>ПХП Головного Мозга ? :)

ну-ка, организуй-ка на ab работу с куками.

borisych ★★★★★
()
Ответ на: комментарий от borisych

> ага. у меня тут сайтик медленно работает, что делать? вот вам исходники БД - пилите.

o_0. google://PgSQL

> ну-ка, организуй-ка на ab работу с куками


-C cookie-name=value
Add a Cookie: line to the request. The argument is typically in the form of a name=value pair. This field is repeatable.

phasma ★☆
()
Ответ на: комментарий от volh

> а что, для пыха нет порта WWW::Mechanize? o_O

В Symfony есть sfBrowser, но он скорее для функциональных тестов — исполняется внутри и ему одновременно доступен и результат обработки, и сопутствующие классы.

shimon ★★★★★
() автор топика
Ответ на: комментарий от anonymous

> Kachegrind покажет тебе где узкие места в движке, незабудь только отрубить отладочные флаги потом

Тьфу-тьфу, продакшен — не моя забота.

shimon ★★★★★
() автор топика
Ответ на: комментарий от phasma

> > Кстати, господа, как вам база данных — 155 табличек и все в MyISAM?

> а оно нужно в таких количествах ?


Веришь — я не знаю (меня только-только посвящают)! :-) На трезвую голову понять это невозможно, когда я врублюсь в тему настолько, чтобы что-то менять, боюсь, печень буду на тачке перед собой возить.

shimon ★★★★★
() автор топика
Ответ на: комментарий от shimon

> а что, для пыха нет порта WWW::Mechanize? o_O

есть selenium

anonymous
()
Ответ на: комментарий от phasma

>-C cookie-name=value Add a Cookie: line to the request. The argument is typically in the form of a name=value pair. This field is repeatable.

детский сад, то что ты написал это не работа с куками, а полная х..ня

borisych ★★★★★
()

Развернул я наконец исходники проекта.

Вах.

1,2 гигабайта смешанных в одну кучу людей, коней^W^Wкода с какой-то закешированной им еще хренью, все вот так вот гамузом.

С утра — разбираться, что же там тормозит. %)

Ждите шизофазию от Шимона в толксах at 11.

shimon ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.