ich diesen Test auf CentOS 6.3 abgeschlossen haben, mit nginx 1.2.7
, apache 2.4.3
und php 5.4.12
alles kompiliert mit keine Änderungen an den Standard.
./configure
make && make install
Mit Ausnahme von PHP, wo ich php-fpm
./configure --enable-fpm
Alle Server haben 100% Standardkonfiguration außer wie unten erwähnt aktiviert. Alle Tests wurden auf einem Testserver ohne Last und einem Neustart zwischen den Tests durchgeführt. Der Server verfügt über einen Intel (R) Xeon (R) Prozessor E3-1230, 1 GB RAM und 2 x 60 GB SSD in RAID 1. Die Tests wurden unter Verwendung laufen ab -n 50000 -c 500 http://127.0.0.1/test.php
Test-PHP-Skript:
<?php
$testing = 0;
for ($i = 0; $i < 1000; $i++) {
$testing++;
}
echo $testing;
ich auch musste php in nginx.conf
aktivieren, da es nicht standardmäßig aktiviert ist.
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
Nginx - PHP-FPM auf 127.0.0.1:9000
Concurrency Level: 500
Time taken for tests: 10.932 seconds
Complete requests: 50000
Failed requests: 336
(Connect: 0, Receive: 0, Length: 336, Exceptions: 0)
Write errors: 0
Non-2xx responses: 336
Total transferred: 7837824 bytes
HTML transferred: 379088 bytes
Requests per second: 4573.83 [#/sec] (mean)
Time per request: 109.317 [ms] (mean)
Time per request: 0.219 [ms] (mean, across all concurrent requests)
Transfer rate: 700.17 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 34 338.5 0 7000
Processing: 0 34 166.5 23 8120
Waiting: 0 34 166.5 23 8120
Total: 13 68 409.2 23 9846
Percentage of the requests served within a certain time (ms)
50% 23
66% 28
75% 32
80% 33
90% 34
95% 46
98% 61
99% 1030
100% 9846 (longest request)
Nginx - PHP-FPM über die Buchse (config Änderung fastcgi_pass)
fastcgi_pass unix:/var/lib/php/php.sock;
Concurrency Level: 500
Time taken for tests: 7.054 seconds
Complete requests: 50000
Failed requests: 351
(Connect: 0, Receive: 0, Length: 351, Exceptions: 0)
Write errors: 0
Non-2xx responses: 351
Total transferred: 7846209 bytes
HTML transferred: 387083 bytes
Requests per second: 7087.70 [#/sec] (mean)
Time per request: 70.545 [ms] (mean)
Time per request: 0.141 [ms] (mean, across all concurrent requests)
Transfer rate: 1086.16 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 26 252.5 0 7001
Processing: 0 24 112.9 17 3683
Waiting: 0 24 112.9 17 3683
Total: 7 50 306.4 17 7001
Percentage of the requests served within a certain time (ms)
50% 17
66% 19
75% 20
80% 21
90% 23
95% 31
98% 55
99% 1019
100% 7001 (longest request)
Apache - Mod_php
Concurrency Level: 500
Time taken for tests: 10.979 seconds
Complete requests: 50000
Failed requests: 0
Write errors: 0
Total transferred: 9800000 bytes
HTML transferred: 200000 bytes
Requests per second: 4554.02 [#/sec] (mean)
Time per request: 109.793 [ms] (mean)
Time per request: 0.220 [ms] (mean, across all concurrent requests)
Transfer rate: 871.67 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 22 230.2 1 7006
Processing: 0 58 426.0 18 9612
Waiting: 0 58 425.9 18 9611
Total: 5 80 523.8 19 10613
Percentage of the requests served within a certain time (ms)
50% 19
66% 23
75% 25
80% 26
90% 31
95% 36
98% 1012
99% 1889
100% 10613 (longest request)
Ich werde mehr als glücklich sein zu tunen Apache weiter, aber es scheint, Apache kann einfach nicht mithalten. Der klare Gewinner ist nginx mit php-fpm via Socket.
"nur die PHP-Verarbeitung selbst" Weder mod_php noch php-fpm verarbeitet PHP selbst. Sie rufen einfach einen eingebetteten Interpreter an, der alle Aufgaben für sie erledigt. Und der PHP-Interpreter ist in beiden Fällen derselbe. – VBart
Nein, es ist nicht oder, genauer gesagt, nicht vollständig. Im ersten Fall ist der Interpreter als ein Modul für Apache aufgebaut, was bedeutet, dass er im Wesentlichen innerhalb von Apache läuft, während der zweite FPM ist, ein FastCGI-Dienst, der eine Zeit lang mit PHP ausgeliefert wurde. Die Antwort enthält jedoch offensichtlich die Kommunikationszeit zwischen nginx und dem FPM-Server, die in diesem Fall Teil der Verarbeitungszeit ist. Sorry, wenn die Frage nicht ganz klar war. – petermolnar