php5-cgi+Nginx: which is faster 127.0.0.1:9000 or Unix sockets?
Mark Alan
varia at e-healthexpert.org
Thu Nov 6 17:07:46 MSK 2008
We intended to test server performance using either:
/usr/bin/php-cgi -q -b 127.0.0.1:9000 # i.e., the classic IP:port
or:
/usr/bin/php-cgi -q -b /tmp/php-fastcgi.socket # i.e. using Unix
domain sockets (and having taken care to change the relevant lines in
nginx config files from: fastcgi_pass 127.0.0.1:9000 to fastcgi_pass
unix:/tmp/php-fastcgi.socket)
In order to verify the impact of the differences described at:
<http://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html>
*Material*
- Ubuntu 8.04.1 LTS server
- Nginx 0.6.32 installed with:
wget
http://http.us.debian.org/debian/pool/main/n/nginx/nginx_0.6.32-3_i386.deb
sudo gdebi nginx_0.6.32-3_i386.deb
- PH5 5.2.4 installed with:
sudo aptitude -R install php5-cli php5-cgi php5-mysql php5-imap
- Apache Bench 2.0.40-dev installed with:
sudo aptitude -R install apache2-utils
*Methods*
- Create php test script with:
echo -e '<?php\n;\n?>' | sudo -u www-data tee
/var/www/nginx-default/benchtest.php
- Start php-cgi using the Ubuntu's UPSTART script posted as "20081106 -
How to enable Nginx to serve PHP code/pages in UBUNTU" in this Nginx
mailing list.
- Start Apache Bench script with:
sudo ab -n 10000 -c 100 http://127.0.0.1/benchtest.php | tee
bench-ip.log # after configuring php-cgi to listen at 127.0.0.1:9000
sudo ab -n 10000 -c 100 http://127.0.0.1/benchtest.php | tee
bench-socket.log #after configuring php-cgi a unix socket at
/tmp/php-fastcgi.socket
*Results and Discussion*
We made a delta file (bench-diff.txt) using the linux diff utility to
show the differences between the two approaches:
- diff -Naur bench-ip.log bench-socket.log > bench-diff.txt
Using the described testing procedure shows that using using Unix domain
sockets, besides the elsewhere described advantage of being more secure
(see external link above), significantly improves server cgi performance.
Regards,
M.
File bench-diff.txt follows:
--- cut here ---
--- bench-ip.log 2008-11-06 13:22:30.000000000 +0000
+++ bench-socket.log 2008-11-06 13:18:15.000000000 +0000
@@ -13,31 +13,31 @@
Document Length: 0 bytes
Concurrency Level: 100
-Time taken for tests: 5.708770 seconds
+Time taken for tests: 4.980691 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 1510000 bytes
HTML transferred: 0 bytes
-Requests per second: 1751.69 [#/sec] (mean)
-Time per request: 57.088 [ms] (mean)
-Time per request: 0.571 [ms] (mean, across all concurrent requests)
-Transfer rate: 258.20 [Kbytes/sec] received
+Requests per second: 2007.75 [#/sec] (mean)
+Time per request: 49.807 [ms] (mean)
+Time per request: 0.498 [ms] (mean, across all concurrent requests)
+Transfer rate: 295.94 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
-Connect: 0 0 1.4 0 27
-Processing: 9 55 9.5 55 156
-Waiting: 9 55 9.3 55 154
-Total: 15 56 9.0 55 156
+Connect: 0 1 4.1 0 35
+Processing: 4 47 12.8 48 145
+Waiting: 4 46 12.6 48 129
+Total: 12 48 11.1 49 145
Percentage of the requests served within a certain time (ms)
- 50% 55
- 66% 57
- 75% 59
- 80% 61
- 90% 67
- 95% 71
- 98% 81
- 99% 91
- 100% 156 (longest request)
+ 50% 49
+ 66% 51
+ 75% 53
+ 80% 55
+ 90% 60
+ 95% 69
+ 98% 78
+ 99% 83
+ 100% 145 (longest request)
--- cut here ---
More information about the nginx
mailing list