httpd w/PHP performance
Michael Conrad
mconrad at intellitree.com
Thu Jun 21 17:57:40 UTC 2012
On 6/21/2012 6:01 AM, Laurent Bercot wrote:
>> I have an application that runs well using lighttpd with PHP. In an effort
>> to reduce the memory footprint I tried porting it to the busybox ( 1.20.1 )
>> httpd. It was easy to get this working and it seems to work properly. What
>> isn't good enough is performance when executing PHP scripts. It looks like
>> the httpd is using fork/exec for each cgi, and that fork/exec can use a lot
>> of CPU.
> httpd itself, and on a fast machine with a decent OS, fork/exec themselves,
> don't use *that* much CPU. I suspect that your bottleneck might be the
> startup time of the PHP interpreter, since busybox httpd is indeed spawning
> a new PHP intepreter per request.
$ time perl -e '$i=1000; system("sh","-c","") while $i--;'
real 0m1.213s
user 0m0.004s
sys 0m0.120s
$ time perl -e '$i=1000; system("perl","-e","") while $i--;'
real 0m1.845s
user 0m0.012s
sys 0m0.112s
$ time perl -e '$i=1000; system("ruby","-e","") while $i--;'
real 0m35.341s
user 0m28.954s
sys 0m3.176s
$ time perl -e '$i=1000; system("php","empty.php") while $i--;'
real 2m25.559s
user 2m18.189s
sys 0m6.000s
This is probably because PHP doesn't use modules, and links to
*everything* it has compiled support for. PHP is linked against 41
libraries on my system. The startup cost is probably just the dynamic
linking and initialization of libraries. (To be fair, other scripting
languages would take longer to load than PHP if you loaded all those
modules.)
George: you might want to try recompiling php with the minimum features
needed for your application, and maybe linking with uClibc . It will
help in the CGI case, but also help your memory usage if you use
lighttpd and a pool of php processes.
-Mike
More information about the busybox
mailing list