Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Windows 7 php + Symfony2 terribly slow

This is an issue I've been having for a long time. I want to run PHP applications on my windows computer and it has a terribly high load time, around 10-25 seconds. I have tried many things:

  • First I tried a simple XAMPP installation
  • I read WAMP might be faster, so I tried WAMP, too. It gave me the same results
  • Then I installed an nginx server with PHP, but it did not help either
  • Finally, I installed an Ubuntu 11.10 in VirtualBox and I shared my windows files containing my project, but the result was even worse: over 22 second load time each time.

UPDATE: I have even tried APC - it improved a bit but still 6-8 sec/page

I uploaded my files to a linux server(shared hosting), on which it runs in around 300-500 ms. On the XAMPP installation I tried to run other (i.e. not Symfony2) applications as well(e.g. phpmyadmin), which too were slower than on the shared hosting, but not extremely slow, with 2-3 sec load time. Until I change to Linux as the main OS, how could I improve performance? I have a laptop with i7 CPU, 4 GB RAM, 5400RPM HDD, Win7 x64.

Thank you for your help!

UPDATE2: For some mysterious reason my Symfony routing didn't work with fcgid (it gave me a 404 error for everything) so I went back for using PHP as a module. Now, it has become the worst ever (worse than it used to be as a module): app mode 20-25 sec, and in dev mode, over 30s every time, so I get a timeout error, and it's the same with or without APC enabled.

Here you can see this error. This is reproduceable: each time it reaches a different point of execution within 30s:

enter image description here

like image 647
David Frank Avatar asked Mar 24 '12 19:03

David Frank


4 Answers

Update:

Since PHP 5.5 has now integrated the PHP OPCache, this speeds up the execution time. In my setup a full request with database access takes 180ms now.

Steps:

  1. Update to the latest php version
  2. Enable OPCache
  3. Disable xdebug
  4. Set realpath_cache_size = 2M as DemonTPx mentioned

php.ini settings:

realpath_cache_size = 2M
[XDebug]
xdebug.profiler_enable = 0
xdebug.remote_enable = 0
[opcache]
zend_extension = "C:\xampp18\php\ext\php_opcache.dll"
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000

Why is Windows slower than Unix?

As discussed here, PHP is very slow in file_exists, and filemtime() on Windows. since Symfony2 is using these functions in dev mode a lot. we won't get under 700ms (in <= 5.4) on Windows. PHP 5.5 allows now 180ms.

A solution could be WinCache which was developed by microsoft to solve this problem on IIS. But as it only works on several Windows versions and also only with IIS it's no solution for me.

Alternative

Also a nice solution I can recommend is to have a Linux Virtual Machine on Virtualbox. This is easy to setup and is also more like the production environment.

like image 164
Simon Fakir Avatar answered Oct 17 '22 18:10

Simon Fakir


I have the exact same problem. Setting the following in php.ini increased the performance for me from ~800ms to ~300ms:

php.ini:

realpath_cache_size = 2M

Still not the ~100ms I get from a unix machine, but it makes a difference at least

like image 20
Bert Hekman Avatar answered Oct 17 '22 16:10

Bert Hekman


I had a similar problem with symfony 1 for a time on XP and Server 2003. The solution was to install a PHP accelerator (eAccelerator for us, APC might be a better bet these days) plus FastCGI/fcgid.

Addendum: it's been ages since I've used Apache on Windows. I have generally been of the view that its performance has been getting steadily better, rather than worse; however as with most unusual set-ups, good results are not guaranteed. As per my earlier comment, I recommend asking your question at Apache Lounge, where I previously have received some great expert advice.

If memory serves correctly, they can offer you a free Apache binary compiled with better tools than the standard one offered on the Apache website.

like image 9
halfer Avatar answered Oct 17 '22 18:10

halfer


Wow, After trying many different things, I've finally succeeded to move from a 15s execution time to a 3s exec time on windows7 with wamp.

How to install wincache extension : http://us2.php.net/manual/en/wincache.installation.php

Where to download the wincache dll: http://sourceforge.net/projects/wincache/

My php.ini config change:

[PHP]
realpath_cache_size = 2M
extension=php_wincache.dll
; XDEBUG Extension
;zend_extension = "C:/Net Generation/wamp/bin/php/php5.5.12/zend_ext/php_xdebug-2.2.5-5.5-vc11.dll"
;
[xdebug]
xdebug.remote_enable = off
xdebug.profiler_enable = Off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = "C:/Net Generation/wamp/tmp"
xdebug.show_local_vars=0
xdebug.max_nesting_level=200

[opcache]
zend_extension = "C:/Net Generation/wamp/bin/php/php5.5.12/ext/php_opcache.dll"
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000
like image 3
Sébastien Avatar answered Oct 17 '22 17:10

Sébastien