Nginx ridiculously slow with PHP+SSL combined

Xeriar nginx-forum at nginx.us
Thu Jan 26 15:30:56 UTC 2012


So, I'm having an issue with SSL and fastcgi_pass,
specifically to PHP. 

PHP over standard http gets me over 6,000 requests
per second, without stressing the CPU. It's limited
by somaxconn and maximum php children.

Static SSL also easily passes 6,000 requests per
second without stressing the CPU. It's limited
by raw bandwidth. Setting up a proxy on localhost
and forcing it through proxy_pass did not significantly
slow this test down.

Calling the same php file over SSL, however, causes
nginx to fully utilize all cores - php takes nothing -
and only permits 400 requests/second. Taking CPU
usage into account, this is roughly fifty times slower
than the above two tests. Disabling gzip provides
a ~10% boost in speed. Likewise, I got the same
result through proxy_pass.

My server is a quad-core nehalem (E5520 - 2.27 ghz)
with 12 gigs of RAM, running Debian Squeeze.

I've also done these tests on a Wheezy server,
on the hopes that the issue had been resolved
in 1.1.12, but no such luck. I hadn't tweaked
its settings to handle this sort of load, so
the base php and ssl requests/second are 
much less dramatic than the production server,
but the PHP-over-SSL results are the same.

This seems like a rather enormous discrepancy,
but I have no idea where to look. Does anyone have
an idea of what might be going on?
  
Siege reports the same limitation for php over SSL,
but because it doesn't support keepalive it blows
through sockets too fast to meaningfully test
my servers for standard php or ssl calls.

apachebench logs follow.
----

ab -k -c 900 -n 90000 http://amaterasu/test.php
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd,
http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking amaterasu (be patient)
Completed 9000 requests
Completed 18000 requests
Completed 27000 requests
Completed 36000 requests
Completed 45000 requests
Completed 54000 requests
Completed 63000 requests
Completed 72000 requests
Completed 81000 requests
Completed 90000 requests
Finished 90000 requests


Server Software:        nginx
Server Hostname:        amaterasu
Server Port:            80

Document Path:          /test.php
Document Length:        24 bytes

Concurrency Level:      900
Time taken for tests:   14.159 seconds
Complete requests:      90000
Failed requests:        5754
   (Connect: 0, Receive: 0, Length: 5754, Exceptions: 0)
Write errors:           0
Keep-Alive requests:    0
Total transferred:      14577071 bytes
HTML transferred:       2157071 bytes
Requests per second:    6356.29 [#/sec] (mean)
Time per request:       141.592 [ms] (mean)
Time per request:       0.157 [ms] (mean, across all concurrent
requests)
Transfer rate:          1005.38 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       58   61   3.4     61     122
Processing:    59   80  83.6     70    3084
Waiting:       59   78  83.4     69    3083
Total:        118  141  83.8    131    3145

Percentage of the requests served within a certain time (ms)
  50%    131
  66%    139
  75%    146
  80%    151
  90%    168
  95%    185
  98%    200
  99%    210
 100%   3145 (longest request)
 
----

ab -k -c 900 -n 90000 https://amaterasu/robots.txt
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd,
http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking amaterasu (be patient)
Completed 9000 requests
Completed 18000 requests
Completed 27000 requests
Completed 36000 requests
Completed 45000 requests
Completed 54000 requests
Completed 63000 requests
Completed 72000 requests
Completed 81000 requests
Completed 90000 requests
Finished 90000 requests


Server Software:        nginx
Server Hostname:        amaterasu
Server Port:            443
SSL/TLS Protocol:       TLSv1/SSLv3,RC4-SHA,2048,128

Document Path:          /robots.txt
Document Length:        1063 bytes

Concurrency Level:      900
Time taken for tests:   13.838 seconds
Complete requests:      90000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    89708
Total transferred:      118881532 bytes
HTML transferred:       95670000 bytes
Requests per second:    6503.96 [#/sec] (mean)
Time per request:       138.377 [ms] (mean)
Time per request:       0.154 [ms] (mean, across all concurrent
requests)
Transfer rate:          8389.77 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   20 222.2      0    3959
Processing:    59  117 177.0    107    3496
Waiting:       59  117 177.0    107    3496
Total:         59  137 351.4    107    4083

Percentage of the requests served within a certain time (ms)
  50%    107
  66%    110
  75%    112
  80%    113
  90%    117
  95%    120
  98%    125
  99%   1590
 100%   4083 (longest request)
 
----

ab -k -c 900 -n 9000 https://amaterasu/test.php
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd,
http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking amaterasu (be patient)
Completed 900 requests
Completed 1800 requests
Completed 2700 requests
Completed 3600 requests
Completed 4500 requests
Completed 5400 requests
Completed 6300 requests
Completed 7200 requests
Completed 8100 requests
Completed 9000 requests
Finished 9000 requests


Server Software:        nginx
Server Hostname:        amaterasu
Server Port:            443
SSL/TLS Protocol:       TLSv1/SSLv3,RC4-SHA,2048,128

Document Path:          /test.php
Document Length:        24 bytes

Concurrency Level:      900
Time taken for tests:   22.271 seconds
Complete requests:      9000
Failed requests:        445
   (Connect: 0, Receive: 0, Length: 445, Exceptions: 0)
Write errors:           0
Keep-Alive requests:    0
Total transferred:      1457620 bytes
HTML transferred:       215620 bytes
Requests per second:    404.11 [#/sec] (mean)
Time per request:       2227.101 [ms] (mean)
Time per request:       2.475 [ms] (mean, across all concurrent
requests)
Transfer rate:          63.92 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      181 1033 682.6    885    3609
Processing:    59 1169 655.3   1103    3552
Waiting:       59 1157 661.4   1094    3552
Total:        266 2202 796.6   2223    4715

Percentage of the requests served within a certain time (ms)
  50%   2223
  66%   2369
  75%   2474
  80%   2720
  90%   3140
  95%   3775
  98%   3982
  99%   4005
 100%   4715 (longest request)

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,221673,221673#msg-221673



More information about the nginx mailing list