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

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

Другие вопросы по тегам