Я выполняю тесты производительности для моей магистерской диссертации, и я получаю очень слабую производительность приложения 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