Низкая производительность

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

Результаты теста для команды:

ab -c10 -t60 http: //sf2.cities.localhost/app.php

Server Software: Apache/2.2.20 Server Hostname: sf2.cities.localhost Server Port: 80 Document Path: /app.php Document Length: 2035 bytes Concurrency Level: 10 Time taken for tests: 60.162 seconds Complete requests: 217 Failed requests: 68 (Connect: 0, Receive: 0, Length: 68, Exceptions: 0) Write errors: 0 Non-2xx responses: 68 Total transferred: 393876 bytes HTML transferred: 321102 bytes Requests per second: 3.61 [#/sec] (mean) Time per request: 2772.458 [ms] (mean) Time per request: 277.246 [ms] (mean, across all concurrent requests) Transfer rate: 6.39 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 2.1 0 11 Processing: 230 2641 2493.1 1778 17146 Waiting: 230 2641 2493.1 1778 17146 Total: 230 2642 2492.9 1778 17146 

Перед тестированием я запустил две команды:

php app / console –env = prod cache: очистить php app / console –env = prod cache: warmup

Страница проверки Symfony сообщает мне, что у меня только нет расширения intl, поэтому apc, вероятно, в порядке.

Моя версия PHP:

PHP 5.3.6-13ubuntu3.6 с Suhosin-Patch

Может ли кто-нибудь дать мне совет о том, что еще я должен проверить в своем env?

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

Вы получаете некоторые ошибки. Failed requests: 68 . Посмотрите в лог-файлы apache, они могут указать на проблему. Если вы ничего не обнаружили в них, убедитесь, что ведение журнала включено, и в вашем конфигурационном файле установлен правильный уровень журнала. Ваше определение VirtualHost должно содержать что-то вроде

  LogLevel debug CustomLog /var/log/apache2/access-localhost.log vhost_combined ErrorLog /var/log/apache2/error-localhost.log 

Используйте LogLevel debug только для отладки. Вы хотите установить его для warn или error для производства.

Включите ведение журнала ошибок в php.ini и ваши скрипты и проверьте свой журнал ошибок php на наличие каких-либо проблем.

Убедитесь, что ваш apache2.conf настроен правильно, особенно модуль mpm. Вот стандартная, хотя и далеко не идеальная конфигурация:

 <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule> <IfModule mpm_worker_module> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> 

Удостоверьтесь, что у вас достаточно ОЗУ для этого, вам потребуется около 1 ГБ только для apache2 (по крайней мере, под Linux)

Вы также можете попробовать проверить производительность против небольшого статического текстового файла (около 2 килобайт) и посмотреть, как выглядит эта производительность. После этого проверьте против простого <? php echo 'Hello World!' ?> <? php echo 'Hello World!' ?> <? php echo 'Hello World!' ?> чтобы увидеть влияние PHP-интерпретатора на производительность. Оба теста должны дать вам представление о том, что ваш apache способен с текущей конфигурацией. Если производительность в обоих тестах приемлема, ваше приложение работает медленно.

Еще одна вещь, которую нужно попробовать – отключить параллелизм в своем тесте и посмотреть, поможет ли это. Это указывает на проблемы параллелизма в доступе к вашему приложению или базе данных.

 ab -c1 -t60 http://sf2.cities.localhost/app.php 

Если он все еще медленный, apache performance tuning google и (при условии, что вы используете MySQL в качестве базы данных). mysql performance tuning