Benchmarking php-fpm-fastcgi-spawn-fcgi. So which is fastest then?
with thanks to Mo for the cracking piccy (hint: small bars are good)
PHP-FPM Separate or Integrated, Spawn-FCGI or FastCGI? The difference is compared with 7 modular tests to help you choose the best PHP web server solution.
Using bare-bones, freshly installed * and rebooted Linode 360 boxes (Intel Xeon CPU L5520 @ 2.27GHz) and running Nginx web server on Ubuntu Hardy Heron 8.04 32bit, each was tested 10 times to resolve the 7 categories: Strings, Encryption, Dates, Images, Arrays, Filesystem & Objects.
* You can find the precise installation procedures I used for each linked from the PHP Index page.
Setup Unmanaged VPS: The Ubuntu-Nginx Guide
Take your virtual private server from zero to hero
.. from blank box to cute-as server ..
with this easy-to-follow copy/paste guide.
22+ parts with video, here’s the index.
Overall, the winner was a Separate PHP-FPM compilation, about 10% faster than PHP-FPM’s Integrated configuration, 14% faster than Spawn-FCGI and almost 20% faster than FastCGI.
Discrepancy Because PHP-FPM is compiled from source and Spawn-FCGI and FastCGI are installed via repositories (using aptitude or apt-get), the applicable PHP versions are PHP-5.3.0 and PHP-5.2.4-2ubuntu5.10 respectively and this will likely have impacted the results. PHP-5.3.0 is bundled with Zend-2.3.0 and PHP-5.2.4-2ubuntu5.10 with Zend-2.2.0 (Zend’s Memory Manager was enabled.)
.. While that sounds like a detraction (and it is a detraction from the laboratory results), as these are the actual versions you get depending on your preferred PHP installation method (from source or via repository) they are usefully reflective scenarios of the kind of PHP execution power you can expect on your server, at least for a machine of similar specification.
About the “Free PHP Benchmark Performance Script”
It calculates benchmark speeds (PHP execution times) of PHP web hosting servers.
The PHP script performs some simple mathematics and repetitive string manipulation functions (20,000 times each), and records the PHP code execution time it takes to complete the PHP functions.
This benchmarking process is repeated 10 times, redirecting back to the PHP script each time after a short pause.
The average PHP code execution time is given along with the average time of 8 iterations – after removing the highest (slowest) and lowest (fastest) completion times.
My thanks to Nick Barrett for tailoring an excellent PHP benchmark script, the best I found and based on that originally found at the Free-Webhosts.com website.
Enough background, here’s the deal:-
PHP-FPM (Separate) Benchmarking
| Test | Subscores | Overall | ||||||
| Strings | Encryption | Dates | Images | Arrays | Filesystem | Objects | ||
| 1 | 71 | 76 | 60 | 92 | 53 | 78 | 28 | 458 |
| 2 | 72 | 75 | 37 | 95 | 56 | 82 | 26 | 443 |
| 3 | 51 | 52 | 24 | 66 | 39 | 55 | 20 | 306 |
| 4 | 51 | 53 | 24 | 65 | 39 | 81 | 29 | 341 |
| 5 | 68 | 55 | 26 | 63 | 39 | 55 | 20 | 326 |
| 6 | 76 | 74 | 40 | 89 | 55 | 80 | 29 | 443 |
| 7 | 75 | 75 | 40 | 76 | 40 | 57 | 20 | 383 |
| 8 | 50 | 52 | 28 | 66 | 42 | 58 | 20 | 318 |
| 9 | 64 | 55 | 36 | 79 | 54 | 66 | 20 | 375 |
| 10 | 55 | 53 | 24 | 72 | 46 | 81 | 34 | 366 |
| Avg | 63 ms | 62 ms | 34 ms | 76 ms | 46 ms | 69 ms | 25 ms | 376 ms |
Lowest time: 306 ms, Highest time : 458 ms
Average of middle 8 times: 374 ms
| System Details | |
| PHP | 5.3.0 |
| Zend | 2.3.0 |
| Avg. Time | 376 ms |
PHP-FPM (Integrated) Benchmarking
| Test | Subscores | Overall | ||||||
| Strings | Encryption | Dates | Images | Arrays | Filesystem | Objects | ||
| 1 | 74 | 71 | 9 | 99 | 42 | 136 | 28 | 459 |
| 2 | 74 | 75 | 9 | 82 | 46 | 96 | 20 | 401 |
| 3 | 63 | 52 | 6 | 65 | 39 | 101 | 20 | 346 |
| 4 | 76 | 75 | 6 | 72 | 39 | 109 | 21 | 397 |
| 5 | 71 | 75 | 9 | 95 | 45 | 102 | 26 | 422 |
| 6 | 80 | 55 | 6 | 84 | 56 | 143 | 29 | 453 |
| 7 | 52 | 62 | 9 | 94 | 58 | 122 | 29 | 425 |
| 8 | 65 | 75 | 8 | 93 | 58 | 135 | 28 | 462 |
| 9 | 78 | 52 | 6 | 67 | 53 | 120 | 20 | 397 |
| 10 | 72 | 53 | 6 | 67 | 39 | 115 | 28 | 380 |
| Avg | 71 ms | 64 ms | 7 ms | 82 ms | 48 ms | 118 ms | 25 ms | 414 ms |
Lowest time: 346 ms, Highest time : 462 ms
Average of middle 8 times: 417 ms
| System Details | |
| PHP | 5.3.0 |
| Zend | 2.3.0 |
| Avg. Time | 414 ms |
SPAWN-FCGI Benchmarking
| Test | Subscores | Overall | ||||||
| Strings | Encryption | Dates | Images | Arrays | Filesystem | Objects | ||
| 1 | 89 | 62 | 254 | 52 | 77 | 96 | 40 | 671 |
| 2 | 68 | 52 | 33 | 53 | 68 | 98 | 40 | 411 |
| 3 | 94 | 74 | 45 | 67 | 81 | 76 | 41 | 477 |
| 4 | 86 | 63 | 34 | 47 | 59 | 68 | 33 | 389 |
| 5 | 68 | 55 | 32 | 47 | 58 | 85 | 31 | 376 |
| 6 | 81 | 75 | 48 | 70 | 85 | 76 | 34 | 470 |
| 7 | 91 | 54 | 46 | 55 | 58 | 81 | 29 | 413 |
| 8 | 67 | 51 | 33 | 48 | 60 | 65 | 28 | 353 |
| 9 | 69 | 52 | 33 | 47 | 71 | 92 | 39 | 404 |
| 10 | 79 | 51 | 30 | 49 | 59 | 67 | 28 | 363 |
| Avg | 79 ms | 59 ms | 59 ms | 53 ms | 68 ms | 80 ms | 34 ms | 433 ms |
Lowest time: 353 ms, Highest time : 671 ms
Average of middle 8 times: 413 ms
| System Details | |
| PHP | 5.2.4-2ubuntu5.10 |
| Zend | 2.2.0 |
| Avg. Time | 433 ms |
PHP-FASTCGI Benchmarking
| Test | Subscores | Overall | ||||||
| Strings | Encryption | Dates | Images | Arrays | Filesystem | Objects | ||
| 1 | 92 | 59 | 38 | 48 | 60 | 73 | 28 | 398 |
| 2 | 86 | 73 | 44 | 63 | 86 | 92 | 40 | 484 |
| 3 | 94 | 63 | 32 | 57 | 82 | 92 | 35 | 455 |
| 4 | 92 | 75 | 49 | 51 | 69 | 69 | 28 | 435 |
| 5 | 69 | 54 | 32 | 57 | 62 | 93 | 40 | 407 |
| 6 | 93 | 69 | 48 | 70 | 79 | 93 | 41 | 494 |
| 7 | 82 | 72 | 36 | 66 | 88 | 93 | 39 | 475 |
| 8 | 95 | 75 | 37 | 47 | 61 | 79 | 35 | 429 |
| 9 | 108 | 74 | 44 | 66 | 81 | 94 | 40 | 507 |
| 10 | 94 | 72 | 174 | 70 | 87 | 100 | 42 | 638 |
| Avg | 91 ms | 68 ms | 53 ms | 60 ms | 76 ms | 88 ms | 37 ms | 472 ms |
Lowest time: 398 ms, Highest time : 638 ms
Average of middle 8 times: 461 ms
| System Details | |
| PHP | 5.2.4-2ubuntu5.10 |
| Zend | 2.2.0 |
| Avg. Time | 472 ms |
Hope that helps it’s all yer gettin’.
guv
Setup Unmanaged VPS: The Ubuntu-Nginx Guide
Take your virtual private server from zero to hero
with this easy-to-follow copy/paste guide.
“My local PC runs Windows” Show me for Linux/Mac
“My local machine is Linux/Mac” Show me for Windows
22+ parts with video, here’s the index ..
-
Setup Unmanaged VPS: The Ubuntu-Nginx Guide
Introducing vpsBible’s how-to guide for setting up a super-charged unmanaged VPS featuring Ubuntu and Nginx.
-
VPS (Virtual Private Server) vs Shared vs Dedicated
Before getting stuck in, let’s compare the web host types in detail and weigh up the differences between managed & unmanaged VPS.
-
Set Up a VPS Linux Distribution
Opening a VPS hosting account, we’ll choose, configure & launch a Linux server ‘distribution’.
-
Set Up Command Line Interface (CLI) using PuTTY
Now we’ve got a server to play with, we’ll connect to it, using the ’ssh’ protocol for a super-secure link.
-
Create a Linux User & Set Permissions
Initially you’ve logged into your remote Linux machine as ‘root’. We’ll add you as a user now, with root or SuperUser permissions.
-
Encrypt Data with OpenSSH & Auto-Login with PuTTY
Now we can use ‘authentication keys’ to shore up our connection while simplifying login to an automated, password-free yet secure process.
-
Harden the Secure Shell (SSH) & Create a Firewall
The final security step: galvanizing the OpenSSH protocol and setting up an ‘iptables’ firewall. Now the server is rock ruddy solid.
-
Edit bashrc for User-Friendly Linux, plus System Updates
We use the terminal a whole lot so let’s cut ourselves a break and create some command shortcuts, then update the server.
-
Add a Domain Zone to Your VPS
To make your server aware of yourDomain.com you’ll need a few ‘DNS’ records. Damn this is simple I’m practically asleep!
-
Prepare Linux Server for Email with Postfix
In order to send and receive email from our web applications we’ll install some software and tweak the ‘RDNS’ record.
-
Install PHP5 & MySQL – The One-Stop FastCGI Index Page
Add PHP5 & MySQL, but which FastCGI method is best? Here’s the benchmarking, 4 ways to install/compile, add caching modules & more.
-
Nginx (better than Apache) Web Server
Let’s install this supersonic web server, tweaking its file structure & adding default configuration files.
-
Setup FileZilla for Secure FTP (SFTP)
There’s FTP, and then there’s ‘Secure FTP’. We’ll set up FileZilla using SFTP – and those authentication keys – for secure file transfers.
-
Serve Multiple Sites & Blogs with Virtual Hosts
We want a website folder structure, some permissions, some site-specific configuration files and, hey, we’ll hook up ‘FastCGI’.
-
Adding Sub-Domains with Nginx
Need a sub-domain? If you do, here’s how to add subDomain.yourSite.com with an ‘A record’ and a configuration file.
-
Integrate A CMS Like WordPress, WP MU, Drupal etc
For those of you wanting to use a specific content framework, such as a CMS, blogging or forum software, pop in here and we’ll sort that out.
-
Google Apps for Domain-Specific Email
GA’s free Standard Edition for catchall webmail – POP-ping or IMAP-ped to your desktop client – saves precious server resources for your webs.
-
Moving Day! How to Move Your Blog or Site
Nearly there. Here’s the web site or blog migration guide, relocating to your VPS with minimal or no downtime.
Manage Unmanaged VPS: Ubuntu-Nginx Administration
Already set it up? We’d best maintain it then.
Toggle to the .. Ubuntu-Nginx Admin Index
Manage Unmanaged VPS: Ubuntu-Nginx Administration
Maintain your virtual private server with ..
.. cheatsheets, tutorials, tips & guides.
Head back to the .. Ubuntu-Nginx Installation Index
-
Nginx Control Panel: Here’s the Deal
You’re migrating shared-to-VPS and want a GUI like cPanel? No you don’t, not after you read this! What’s more, you don’t need one either.
-
Nginx Control Panel Workarounds
For every control panel module there’s an equivalent (and faster) terminal command. Let’s compare these.
-
Upgrade to Nginx Latest Version with ZERO Downtime
Keep Nginx up-to-date – and optimized for security. This guide shows precisely how *with no missed server requests*.
-
Compile an Advanced Nginx Module Configuration
Need special web server functions? Here’s how to install or upgrade Nginx with bespoke required modules & parameters.
-
Add Web Sites Nginx Cheatsheet
Once you’ve set up your first site, adding more gets easier. Especially when you refer to this. (Let’s face it, I’m just too good to you.)
-
Adding Sub-Domains with Nginx
Rather than add somesite.tld, maybe you want some.subsite.tld? Here’s how to set your A record using a DNS manager and the vhost file for Nginx.
-
Add/Delete MySQL Database from Command Line
Need a database? Want to bin an old db? This tutorial shows you how using the terminal command line console whatnot.
-
Configure phpMyAdmin for Nginx to Maintain MySQL
Rather than have to crunch databases via the command line, we can make life easier by adding this splendid tool to manage them.
-
Backup/Export MySQL DB with CLI & mysqldump
Here’s how to backup a database from the command line using the handy mysqldump utility.
-
Import MySQL Database using Command Line
Import data to a new database with this simple mysqldump guide .. great for reinstating an old backed-up db, for instance.
-
Batch Replace/Delete Data in MySQL Database
Change repetitive db data with a single command. Rather than manually find & alter each instance, isolate the lot & update multiple content.
-
LOST a MySQL Password? How to RESET it
Lost your MySQL password? That’s a bit of a bummer .. or it would be if you didn’t have this new password setup guide, huh.
-
Backup or Upload with Secure Copy SCP (Linux to Linux)
Never mind FTP m8! Save time and download/upload your files using encrypted SCP (secure copy), the #1 Linux-Linux file transfer solution.
-
Backup or Upload with PuTTY PSFTP (Windows/Linux)
Equivalent to the above, how to transfer your files if you’re unlucky enough to be running Windows for your local PC. Not that I’m biased.
-
*USEFULLY* Park A Spare Domain with Nginx
Got a spare domain name sat around doing nothing? Put it to some use, have it point its traffic at your primary domain. Here’s the deal ..
-
Password Protect Nginx Web Files/Directories
Maybe you want a hidden website directory, say, for projects, or are developing a site and want it off-limits ’till launch day. Top tip ..
-
Redirect Web Pages with Nginx Rewrite Rule
Here’s the syntax to point a site or blog to another domain. That way, for instance, traffic from a passive site benefits an active one.
-
Nginx Error & Access Logs
Need to troubleshoot some error, or want to find out who’s trying to hack your site? Here’s a start .. those tell-tale logs.
-
Subversion for Easy CMS Updates ie WordPress/Drupal/etc
A brief introduction to install and know about the power of Subversion, the version control system to keep scripts and platforms up-to-date.
-
You Tell Me …
Something missing? Probably. Let me know what you’d like included. And if it’s listed below, shout out anyhow and I’ll try to bump it.
Nginx Admin: In the Works ..
This lot’s marked for addition already:-
- Setup or Edit DNS using Bind
- Network Tools Troubleshooting Guide
- The Comprehensive Permissions Guide
- Configuring Nginx Rewrites
- Custom Website Error Page
- Setting up Cron Jobs
- Rsync for Incremental Remote-to-Local Backup
- Cron & Rsync for Automatic Backup
- Cron & mysqldump for Auto DB Backup
- Safeguard Bandwidth with Hotlink Protection
- Block Access with Nginx’ IP Deny
Got a Question? Want to Comment?
This site has no comments system. We've got a better system!
Please use the link at the top of the post and goto this topic's forum thread:-
- to help build community
- for a superior knowledge base
- to keep info in one place, not diluted between forum & comments.
For those posts ported from Guvnr.com (pre-Feb/2010), archive comments remain.
Handy info from these comments is in the process of being ported to the forum and attributed to the original author.
If you think this idea sucks, let me know.
Thank you.























Easily setup LEMP on Linode - I'm Knight April 20th, 2010 at 5:20 pm
[...] on my research it seem like PHP-FPM is winning in term of performance and it will be integrate into PHP core, that’s why it should be the first choice if you try [...]
Compare FastCGI, Spawn-FCGI & PHP-FPM for PHP5/Nginx: VPS BIBLE - vpsBible April 23rd, 2010 at 2:32 pm
[...] I’m a speed freak, just show me the benchmarking! [...]