Требуется разгрузить сайт на Yii
Требуется разгрузить сайт на Yii
При создании сайта "а _ м _ и _ л _ а точка ru" использовался Yii фреймворк. Однако я в нем в некотором роде разочаровался, так как сайт одновременно выдерживает только 25 активных посетителей. Когда количество посетителей превышает примерно 25-30 человек, нагрузка на процессор на виртуальном хостинге превышает 7%, из-за чего хостер на некоторое время отключает сайт (чтобы из-за меня не страдали другие клиенты хостинг-провайдера).
Говорят что Yii предназначается как раз для высоко-нагруженных сайтов, если это действительно так и если имеется специалист который разберется в причинах вызывающих высокую процессорную нагрузку и сможет её исправить (необходимо выдерживать одновременно 200 посетителей) - то было бы хорошо обратится за помощью к такому специалисту.
Говорят что Yii предназначается как раз для высоко-нагруженных сайтов, если это действительно так и если имеется специалист который разберется в причинах вызывающих высокую процессорную нагрузку и сможет её исправить (необходимо выдерживать одновременно 200 посетителей) - то было бы хорошо обратится за помощью к такому специалисту.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Требуется разгрузить сайт на Yii
Сразу скажу, что дело не в самом Yii, а в том, как написано приложение. Некторые проекты на Yii выдерживают много большие нагрузки даже на shared-хостинге.
Нравится Yii? Давайте сделаем его лучше!.
- timlar
- Сообщения: 1382
- Зарегистрирован: 2009.09.19, 17:49
- Откуда: Украина, Днепропетровск
- Контактная информация:
Re: Требуется разгрузить сайт на Yii
У нас в проекте одновременно на сайте до 1000 человек, никаких тормозов, никакой особо нагрузки на процессор нет. Проводили небольшое нагрузочное тестирование, 50 коннектов в секунду держал без проблем.
Twitter: @timlar_ua
Re: Требуется разгрузить сайт на Yii
Поддерживаю, именно с процессором никогда проблем не было, только с памятью, но это решается ограничением использования ActiveRecord, кэшированием или банальным её увеличением
- timlar
- Сообщения: 1382
- Зарегистрирован: 2009.09.19, 17:49
- Откуда: Украина, Днепропетровск
- Контактная информация:
Re: Требуется разгрузить сайт на Yii
Либо принудительным уничтожением переменных с целью освобождения памяти. Частая проблема в долгоживущих скриптах (парсеры, воркеры, демоны и т.д.).andy_s писал(а):Поддерживаю, именно с процессором никогда проблем не было, только с памятью, но это решается ограничением использования ActiveRecord, кэшированием или банальным её увеличением
Twitter: @timlar_ua
Re: Требуется разгрузить сайт на Yii
Могут ли поисковые фильтры, реализованные на сайте, быть причиной высоких нагрузок?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Требуется разгрузить сайт на Yii
Так гадать смысла нет. Нужно ставить себе да смотреть, в чём там дело.
Нравится Yii? Давайте сделаем его лучше!.
Re: Требуется разгрузить сайт на Yii
Кстати, насчет потребления памяти ActiveRecord'ом.
Скачал базу данных отсюда: http://www.classbase.ru/download (ОКАТО, почти 4000 записей).
Создал тестовое приложение, сгенерировал модель Okato со связями parent и children, дальше в actionIndex() пишу следующее:
Можно ли было предположить, что всё отработает почти моментально? В представлении данные выводятся табличкой в стандартном серо-голубом интерфейсе:
Итоговое потребление памяти:
Memory Usage: 14,011 KB
Memory Peak Usage: 14,653 KB
Увеличиваю $criteria->limit до 3000 и получаю следующие цифры:
Memory Usage: 26,084 KB
Memory Peak Usage: 28,815 KB
При этом ограничение в php.ini стоит 64 МБ, так что "с запасом".
Каждая модель имеет родителя и множество дочерних (где-то от 0 до 20).
Я ожидал, что будут какие-то запредельные цифры, может я что-то не так сделал?
Скачал базу данных отсюда: http://www.classbase.ru/download (ОКАТО, почти 4000 записей).
Создал тестовое приложение, сгенерировал модель Okato со связями parent и children, дальше в actionIndex() пишу следующее:
Код: Выделить всё
$criteria = new CDbCriteria;
$criteria->limit = 1000;
$models = Okato::model()->with(array('parent', 'children'))->findAll($criteria);
$this->render('index', array(
'models'=>$models,
));
Код: Выделить всё
<table>
<tr>
<th>ID</th>
<th>Название</th>
<th>Родитель</th>
<th>Дочерние элементы</th>
</tr>
<?php foreach ($models as $model): ?>
<tr>
<td><?php echo $model->id; ?></td>
<td><?php echo $model->name; ?></td>
<td><?php echo $model->parent ? $model->parent->name : ''; ?></td>
<td><?php foreach($model->children as $child) echo $child->name.', '; ?></td>
</tr>
<?php endforeach; ?>
</table>
Memory Usage: 14,011 KB
Memory Peak Usage: 14,653 KB
Увеличиваю $criteria->limit до 3000 и получаю следующие цифры:
Memory Usage: 26,084 KB
Memory Peak Usage: 28,815 KB
При этом ограничение в php.ini стоит 64 МБ, так что "с запасом".
Каждая модель имеет родителя и множество дочерних (где-то от 0 до 20).
Я ожидал, что будут какие-то запредельные цифры, может я что-то не так сделал?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Требуется разгрузить сайт на Yii
Ну, в случае данного проекта упирается как раз не в память, как я понял.
Нравится Yii? Давайте сделаем его лучше!.
Re: Требуется разгрузить сайт на Yii
15 и 25 мегабайт?andy_s писал(а):Кстати, насчет потребления памяти ActiveRecord'ом.
Скачал базу данных отсюда: http://www.classbase.ru/download (ОКАТО, почти 4000 записей).
Создал тестовое приложение, сгенерировал модель Okato со связями parent и children, дальше в actionIndex() пишу следующее:
Можно ли было предположить, что всё отработает почти моментально? В представлении данные выводятся табличкой в стандартном серо-голубом интерфейсе:Код: Выделить всё
$criteria = new CDbCriteria; $criteria->limit = 1000; $models = Okato::model()->with(array('parent', 'children'))->findAll($criteria); $this->render('index', array( 'models'=>$models, ));
Итоговое потребление памяти:Код: Выделить всё
<table> <tr> <th>ID</th> <th>Название</th> <th>Родитель</th> <th>Дочерние элементы</th> </tr> <?php foreach ($models as $model): ?> <tr> <td><?php echo $model->id; ?></td> <td><?php echo $model->name; ?></td> <td><?php echo $model->parent ? $model->parent->name : ''; ?></td> <td><?php foreach($model->children as $child) echo $child->name.', '; ?></td> </tr> <?php endforeach; ?> </table>
Memory Usage: 14,011 KB
Memory Peak Usage: 14,653 KB
Увеличиваю $criteria->limit до 3000 и получаю следующие цифры:
Memory Usage: 26,084 KB
Memory Peak Usage: 28,815 KB
При этом ограничение в php.ini стоит 64 МБ, так что "с запасом".
Каждая модель имеет родителя и множество дочерних (где-то от 0 до 20).
Я ожидал, что будут какие-то запредельные цифры, может я что-то не так сделал?
разве это мало? и это на 1 запрос, а если 10 запросов одновременно?
Re: Требуется разгрузить сайт на Yii
Ну тут речь о единоразовой операции, а не о том, что где-то на сайте придется выводить 3000 записей.kukuruku писал(а):15 и 25 мегабайт?
разве это мало? и это на 1 запрос, а если 10 запросов одновременно?
Вот если бы ActiveRecord еще умел возвращать что-то вроде CDbDataReader (хотя бы в случае без использования with), создающий объекты по мере необходимости (например, при проходе этого массива из 3000 элементов в цикле), тогда бы потребление памяти точно уменьшилось на несколько мегабайт. Навеяно прочтением статьи на хабре Сорри, что разговор немного не по теме пошел.
Re: Требуется разгрузить сайт на Yii
imsot писал(а):нагрузка на процессор на виртуальном хостинге превышает 7%, из-за чего хостер на некоторое время отключает сайт.
Без исходников ничего определенного сказать нельзя, но скорее всего в коде есть "плохо написанные" места, в которых проводятся ресурсоемкие вычислительные операции, что и нагружает процессор. Тем не менее на мой взгляд, даже при хорошо написанном коде 200 одновременных посетителей для простого хостинга это перебор.необходимо выдерживать одновременно 200 посетителей
Yii Jabber Conference: yii@conference.jabber.ru
Re: Требуется разгрузить сайт на Yii
У меня была подобная проблема, я уже писал в курилке - скрипт делал вычисления с числами с плавающей запятой итерационным методом.
Он и подвешивал и само приложение и процессор.
Была переписана функция расчета на С - и все сразу стало нормально.
В nginx+php-fpm есть параметры request_slowlog_timeout и slowlog,
можно с ними поиграться и попробовать вычислить "тормозящие" скрипты...
А там уже оптимизировать "требуха" данных макросов...
Вполне может сложиться и так что - база у вас не оптимальной структуры, и yii тут тогда вообще не при чем...
Он и подвешивал и само приложение и процессор.
Была переписана функция расчета на С - и все сразу стало нормально.
В nginx+php-fpm есть параметры request_slowlog_timeout и slowlog,
можно с ними поиграться и попробовать вычислить "тормозящие" скрипты...
А там уже оптимизировать "требуха" данных макросов...
Вполне может сложиться и так что - база у вас не оптимальной структуры, и yii тут тогда вообще не при чем...
Re: Требуется разгрузить сайт на Yii
Для этого и придумано кеширование.kukuruku писал(а): разве это мало? и это на 1 запрос, а если 10 запросов одновременно?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Требуется разгрузить сайт на Yii
Так, мне стало жутко интересно, что же там внутри. Взялся посмотреть.
Нравится Yii? Давайте сделаем его лучше!.
Re: Требуется разгрузить сайт на Yii
ждем отчет
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Требуется разгрузить сайт на Yii
Это только с разрешения заказчика. Одно скажу: возможно, конечно, что разработчик просто недоделал, но кое-где хочется поотрывать руки. Особенно за то, что с нормальным уровнем error_reporting вообще не работает.
Нравится Yii? Давайте сделаем его лучше!.
Re: Требуется разгрузить сайт на Yii
так код сайта выкладывать не нужно, а только описать в чем косяки с памятью и как правильно делать
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Требуется разгрузить сайт на Yii
Косяки не с памятью, что было ясно с первого же поста. Пока глобальных косяка два:
1. Разрабатывали с пониженным error_reporting (это особого отношения к делу не имеет).
2. Влили на хостинг в отладочном режиме и без какой-либо настройки, да ещё и с профайлингом на всю катушку.
С ними стало легче, но так как ресурсы на хостинге ужаты до неприличного, надо лезть ещё и в код.
1. Разрабатывали с пониженным error_reporting (это особого отношения к делу не имеет).
2. Влили на хостинг в отладочном режиме и без какой-либо настройки, да ещё и с профайлингом на всю катушку.
С ними стало легче, но так как ресурсы на хостинге ужаты до неприличного, надо лезть ещё и в код.
Нравится Yii? Давайте сделаем его лучше!.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Требуется разгрузить сайт на Yii
- В view, которые вызываются в цикле кучу раз дёргался asset manager.
- access control вызывается только за тем, чтобы всё разрешить.
- Страшное увлечение виджетами. Вложенность до пяти на строку грида. Строк на главной 25…
- access control вызывается только за тем, чтобы всё разрешить.
- Страшное увлечение виджетами. Вложенность до пяти на строку грида. Строк на главной 25…
Нравится Yii? Давайте сделаем его лучше!.