Задать вопрос

Медленный ли Symfony?

В данный момент изучаю Symfony 3 на PHP 7, и задаюсь вопросом производительности.

Есть задача написания Rest API, решил попробовать Symfony 3, написал тестовое API и попробовал выполнить тест Apache AB (ab -t 10 -c 10) на несуществующий метод, скорость обработки 2062 запроса за 10 секунд или 206 запросов в секунду.

Делаю тоже самое на Phalcon, скорость 23297 запросов за 10 секунд или 2329.69 запросов в секунду. Если запускать один запрос, то скорость одинаковая, примерно 90 мс.

В чем прикол? Может я что-то делаю неправильно и где-то нужно настроить что-то, чтобы на несуществующий запрос была более высокая скорость или это нормальная скорость? Понятно, что Symfony имеет высокую абстракцию и поэтому производительность меньше, но тут просто нужно вывести 404 ошибку.

Отрыв Phalcon становиться меньше, если взять и добавить операцию поиска в базу и маппинга, через модель встроенную в фреймворк. Phalcon правда всеравно быстрее, 1600 запросов против 900 запросов Symfony за 10 секунд.

Конфигурация: PHP 7, Debian, opcache on, Symfony3, Phalcon 3, Кеш Symfony включен, режим Production.

Подключенные бандлы в Symfony:


new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new AppBundle\AppBundle(),
new FOS\RestBundle\FOSRestBundle(),
new JMS\SerializerBundle\JMSSerializerBundle(),
new Nelmio\CorsBundle\NelmioCorsBundle()


----

Ладно, делаем замеры потребляемых ресурсов при выполнении запроса в базу данных на поиск и маппинг:

Выполняем замер Symfony и существующей конфигурации PHP-FPM при работе Apache AB (ab -t 10 -c 10):


20383 www-data 20 0 380884 26040 18020 R 58,3 0,3 0:10.35 php-fpm7.0
21394 www-data 20 0 380884 26040 18020 R 57,3 0,3 0:03.62 php-fpm7.0
21498 www-data 20 0 380884 25908 17900 R 57,3 0,3 0:02.77 php-fpm7.0
19479 www-data 20 0 380884 25020 18020 D 55,7 0,3 0:15.08 php-fpm7.0
20481 www-data 20 0 380884 26044 18020 R 52,0 0,3 0:09.30 php-fpm7.0


Окей, в среднем FPM жрет 52 процента процессора на каждый процесс, делаем замер Phalcon:

24110 www-data 20 0 379016 17876 12848 S 13,6 0,2 0:03.57 php-fpm7.0
25593 www-data 20 0 378884 17776 12848 R 13,3 0,2 0:02.30 php-fpm7.0
27023 www-data 20 0 378884 17608 12788 S 13,3 0,2 0:01.08 php-fpm7.0
25445 www-data 20 0 378884 17780 12848 S 13,0 0,2 0:02.48 php-fpm7.0
27177 www-data 20 0 378884 17600 12788 R 13,0 0,2 0:00.91 php-fpm7.0


Phalcon не грузит систему, при одинаковых действиях, загрузка на каждый процесс 13 процентов. Я могу предположить, что возможно скорость меньше и нагрузка выше из-за того, что Symfony дергает кеш с диска каждый раз, а Phalcon по умолчанию все пишет в память. Если это так, то как перенести весь кеш в память, чтобы исключить нагрузку на диск?
  • Вопрос задан
  • 5310 просмотров
Подписаться 18 Оценить 7 комментариев
Ответ пользователя Котик Антон К ответам на вопрос (6)
27cm
@27cm
TODO: Написать статус
2b931180d841428d919aea22658657d8.png
Картинка кликабельна.
Ответ написан