Низкая производительность
Я делаю тесты производительности для моей магистерской работы, и у меня очень низкая производительность простого приложения 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= кеш продукта: очистить php app/console --env= кэш продукта: разминка
Страница проверки Symfony говорит мне, что у меня нет только расширения intl, поэтому apc, вероятно, в порядке.
Моя версия PHP:
PHP 5.3.6-13ubuntu3.6 с Suhosin-Patch
Может ли кто-нибудь дать мне совет о том, что еще я должен проверить в моем env?
1 ответ
Это может быть любое количество вещей, включая то, что ваш компьютер просто не может справиться с нагрузкой. Я могу дать вам несколько советов, где искать, хотя.
Вы получаете возвращенные ошибки 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. Оба теста должны дать вам представление о том, на что способен ваш apache с текущей конфигурацией. Если производительность в обоих тестах приемлема, значит, ваше приложение работает медленно.
Еще одна вещь, которую стоит попробовать - отключить параллелизм в тесте и посмотреть, поможет ли это. Это может указывать на проблемы параллелизма в вашем приложении или доступе к базе данных.
ab -c1 -t60 http://sf2.cities.localhost/app.php
Если это все еще медленно, Google apache performance tuning
и (при условии, что вы используете MySQL в качестве базы данных) mysql performance tuning