I am doing performance tests for my master thesis and I'm getting very poor performance of Symfony2 simple application. It's simple app, one query and some math.
Test results for command:
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
Before test I launched two commands:
php app/console --env=prod cache:clear
php app/console --env=prod cache:warmup
Symfony check page tells me that I only don't have intl extension, so apc is probably ok.
My PHP version is:
PHP 5.3.6-13ubuntu3.6 with Suhosin-Patch
Could someone give me advice about what else should I check in my env?
It can be any number of things, including that your computer just can't handle the load. I can give you a few pointers where to look though.
You are getting some errors returned Failed requests: 68
. Look into the apache logfiles, they might indicate the problem. If you don't find anything in them make sure logging is enabled and your config file has the correct log level set. Your VirtualHost
definition should contain something like
LogLevel debug
CustomLog /var/log/apache2/access-localhost.log vhost_combined
ErrorLog /var/log/apache2/error-localhost.log
Use LogLevel debug
only for debugging. You'll want to set it to warn
or error
for production.
Enable error logging in php.ini and your scripts and check your php error log for any problems.
Make sure your apache2.conf is configured correctly, especially the mpm module. Here is a standard, albeit far from perfect configuration:
<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>
Make sure you have enough RAM for that, you'll need around 1GB for apache2 only (at least under linux)
You can also try to check performance against a small static text file (around 2kb) and see what that performance looks like. After that check against the simple <? php echo 'Hello World!' ?>
to see the performance impact of the php interpreter. Both tests should give you an indication of what your apache is capable of with the current configuration. If the performance is acceptable in both tests, it's your app that's slow.
Another thing to try is disabling concurrency in your test and see if that helps. That would indicate concurrency problems in your app or database access.
ab -c1 -t60 http://sf2.cities.localhost/app.php
If it's still slow, google apache performance tuning
and (assuming you use MySQL as your database) mysql performance tuning