Ultimate Web Server Benchmark: Apache, NGINX, LiteSpeed, OpenLiteSpeed, Caddy & Lighttpd Compared

Choosing the right web server can make or break your website’s performance. With so many options available Apache, NGINX, LiteSpeed, OpenLiteSpeed, Caddy, and Lighttpd how do you know which one is the fastest, most efficient, and best suited for your needs? To find out, we conducted a comprehensive benchmark, testing these six popular web servers under different conditions, including static file handling, high concurrency, large file downloads, and sustained traffic simulations. Our goal? To identify the best-performing server in terms of speed, resource usage, and reliability.
This is a companion discussion topic for the original entry at https://linuxconfig.org/ultimate-web-server-benchmark-apache-nginx-litespeed-openlitespeed-caddy-lighttpd-compared

benchmarking default configs can lead to poor benchmarks

@Lubos
The article ultimate-web-server-benchmark-apache-nginx-litespeed-openlitespeed-caddy-lighttpd-compared
(new posters are prohibited from adding links to posts)

used Debian default configs for these server. Debian default configs are typically aimed at user-friendliness, not at benchmarks.

For example, the Debian lighttpd default config contains index-file.names = ( "index.php", "index.html" ). Any site interested in performance is probably going to configure PHP-FPM. (Besides, any site really interested in performance is probably not using PHP.) A benchmark accessing the root of the site http://server-ip/ should use lighttpd.conf index-file.names = ( "index.html" ). Your benchmark of lighttpd will be even faster without the unnecessary check for index.php.

Similarly, using Debian default configs – and note how I am highlighting Debian default configs rather than the upstream default configs from the website vendors – for siege without increasing connection limits is a poor benchmark.

Setting lighttpd.conf server.max-fds = 4096 is quite reasonable and will allow lighttpd to pass the siege 200 connection test with flying colors.

@Lubos quoting from your article:
“Test 8 (Siege Benchmark – 200 Users, Sustained Load) significantly influenced the rankings. Only NGINX and OpenLiteSpeed completed this test, while Apache, LiteSpeed, Caddy, and Lighttpd failed due to hanging or hitting connection limits. As a result, these servers received a score of 0% for this test, which impacted their final performance average.”

“The results in this test reflect default configurations and limited resources (2048MB RAM), meaning some servers may perform significantly better when properly configured.”

@Lubos, your disclaimer is insufficient when combined with you factoring 0% into the results for Debian default configs which were not trivially tuned to allow the benchmark to succeed. I understand not spending large amounts of time tuning each server, but you should spend a small effort changing the default config if necessary for the benchmarking tests to succeed. ALL of the web servers can handle the load. That is not what you benchmarked and so your conclusions are biased and much less useful than they otherwise could be.

Please consider updating the article with better data. I am a lighttpd developer and offer my assistance if you need help trivially configuring any of the servers to pass your siege 200 test.

Thank you for your consideration.

Hello @gstrauss ,

thank you for your comment. Much appreciated!

Sorry about that. If the links would be enabled this forum will become a URL junkyard in no time and at the same time it will take all of my time as moderator. Not worth it…

Configuration: index-file.names = ( “index.html” )

$ date ; time ab -n 20000 -c 1000 http://172.16.1.74/
Fri Feb 14 11:11:54 AM CET 2025
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.16.1.74 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests


Server Software:        lighttpd/1.4.69
Server Hostname:        172.16.1.74
Server Port:            80

Document Path:          /
Document Length:        1300 bytes

Concurrency Level:      1000
Time taken for tests:   2.498 seconds
Complete requests:      20000
Failed requests:        0
Total transferred:      30260000 bytes
HTML transferred:       26000000 bytes
Requests per second:    8007.85 [#/sec] (mean)
Time per request:       124.877 [ms] (mean)
Time per request:       0.125 [ms] (mean, across all concurrent requests)
Transfer rate:          11831.91 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   58   9.5     57      81
Processing:    19   64  11.3     64     109
Waiting:        1   40  16.3     39      80
Total:         58  122  11.2    123     154

Percentage of the requests served within a certain time (ms)
  50%    123
  66%    128
  75%    130
  80%    131
  90%    135
  95%    137
  98%    138
  99%    139
 100%    154 (longest request)

real    0m2,538s
user    0m0,253s
sys     0m2,223s

Configuration: index-file.names = ( “index.php”, “index.html” )
2x tests



linuxconfig@linuxconfig:~$ date ; time ab -n 20000 -c 1000 http://172.16.1.74/
Fri Feb 14 11:12:31 AM CET 2025
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.16.1.74 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests


Server Software:        lighttpd/1.4.69
Server Hostname:        172.16.1.74
Server Port:            80

Document Path:          /
Document Length:        1300 bytes

Concurrency Level:      1000
Time taken for tests:   2.458 seconds
Complete requests:      20000
Failed requests:        0
Total transferred:      30260000 bytes
HTML transferred:       26000000 bytes
Requests per second:    8135.90 [#/sec] (mean)
Time per request:       122.912 [ms] (mean)
Time per request:       0.123 [ms] (mean, across all concurrent requests)
Transfer rate:          12021.10 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   58  13.6     56     121
Processing:    27   63  14.3     62     130
Waiting:        0   26  13.4     26     125
Total:         49  121  16.2    124     178

Percentage of the requests served within a certain time (ms)
  50%    124
  66%    127
  75%    128
  80%    128
  90%    130
  95%    149
  98%    164
  99%    171
 100%    178 (longest request)

real    0m2,477s
user    0m0,240s
sys     0m2,092s
linuxconfig@linuxconfig:~$ date ; time ab -n 20000 -c 1000 http://172.16.1.74/
Fri Feb 14 11:13:03 AM CET 2025
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.16.1.74 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests


Server Software:        lighttpd/1.4.69
Server Hostname:        172.16.1.74
Server Port:            80

Document Path:          /
Document Length:        1300 bytes

Concurrency Level:      1000
Time taken for tests:   2.546 seconds
Complete requests:      20000
Failed requests:        0
Total transferred:      30260000 bytes
HTML transferred:       26000000 bytes
Requests per second:    7854.27 [#/sec] (mean)
Time per request:       127.319 [ms] (mean)
Time per request:       0.127 [ms] (mean, across all concurrent requests)
Transfer rate:          11604.99 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   60  12.6     58     119
Processing:    23   65  16.4     63     161
Waiting:        0   46  15.8     45     117
Total:         53  124  21.9    120     222

Percentage of the requests served within a certain time (ms)
  50%    120
  66%    130
  75%    132
  80%    134
  90%    140
  95%    166
  98%    205
  99%    214
 100%    222 (longest request)

real    0m2,581s
user    0m0,264s
sys     0m2,166s

Yes, this was a major disappointment as I was unable to complete this test on all servers using the default configuration. I could have simply disregarded the test and omitted it from the results, but that would have been somewhat unfair to the constants that passed the test. Hence, the bold red disclaimer. Please know that I completely understand where you are coming from!

As per your suggestion, if we can find the minimal configuration for all web servers without bias that allows them to complete the test, we can update test #8 with new results while also highlighting the specific configurations each server requires to pass it.

However, I feel that it might not be an easy task to avoid bias once we start modifying the configuration files. Not to mention that you may naturally lean toward Lighttpd as its developer. :slightly_smiling_face: That said, this is a public website, and I’m happy to address any concerns from other camps as well. Let me know.

Here’s the corrected version of your text:

I have already run some tests with your suggested configuration, but Lighttpd still did not pass. Increasing server.max-connections = 100000, for example, seemed to have some impact; however, I was unable to pass tests lasting longer than 30 seconds.

Here are the test results.

Note: I used the ab command before each test to ensure the server was up and ready.


Configuration:

server.max-fds = 65535
server.max-connections = 100000
server.stat-cache-engine = "simple"


root@linuxconfig:/var/log/lighttpd# cat /proc/$(pgrep lighttpd)/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             7613                 7613                 processes
Max open files            65535                65535                files
Max locked memory         8388608              8388608              bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       7613                 7613                 signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

TEST:

linuxconfig@linuxconfig:~$ date ; time ab -n 20000 -c 1000 http://172.16.1.74/
Fri Feb 14 10:41:31 AM CET 2025
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.16.1.74 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests


Server Software:        lighttpd/1.4.69
Server Hostname:        172.16.1.74
Server Port:            80

Document Path:          /
Document Length:        1300 bytes

Concurrency Level:      1000
Time taken for tests:   2.488 seconds
Complete requests:      20000
Failed requests:        0
Total transferred:      30260000 bytes
HTML transferred:       26000000 bytes
Requests per second:    8038.82 [#/sec] (mean)
Time per request:       124.396 [ms] (mean)
Time per request:       0.124 [ms] (mean, across all concurrent requests)
Transfer rate:          11877.67 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   57  17.2     57     143
Processing:    25   66  20.5     63     185
Waiting:        0   48  18.5     46     144
Total:         52  122  22.4    118     219

Percentage of the requests served within a certain time (ms)
  50%    118
  66%    127
  75%    131
  80%    132
  90%    135
  95%    180
  98%    198
  99%    207
 100%    219 (longest request)

real    0m2,510s
user    0m0,256s
sys     0m2,103s
linuxconfig@linuxconfig:~$ date ; time siege -c200 -b -t20S http://172.16.1.74/
Fri Feb 14 10:41:48 AM CET 2025

{       "transactions":                        62527,
        "availability":                       100.00,
        "elapsed_time":                        19.65,
        "data_transferred":                    64.57,
        "response_time":                        0.06,
        "transaction_rate":                  3182.04,
        "throughput":                           3.29,
        "concurrency":                        193.07,
        "successful_transactions":             62527,
        "failed_transactions":                     0,
        "longest_transaction":                  0.85,
        "shortest_transaction":                 0.00
}

real    0m19,681s
user    0m8,350s
sys     0m10,742s
linuxconfig@linuxconfig:~$ date ; time ab -n 20000 -c 1000 http://172.16.1.74/
Fri Feb 14 10:42:25 AM CET 2025
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.16.1.74 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests


Server Software:        lighttpd/1.4.69
Server Hostname:        172.16.1.74
Server Port:            80

Document Path:          /
Document Length:        1300 bytes

Concurrency Level:      1000
Time taken for tests:   2.440 seconds
Complete requests:      20000
Failed requests:        0
Total transferred:      30260000 bytes
HTML transferred:       26000000 bytes
Requests per second:    8196.04 [#/sec] (mean)
Time per request:       122.010 [ms] (mean)
Time per request:       0.122 [ms] (mean, across all concurrent requests)
Transfer rate:          12109.97 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   54   9.6     53      77
Processing:    18   65  13.9     64     125
Waiting:        0   46  14.7     44     105
Total:         51  119  12.5    120     166

Percentage of the requests served within a certain time (ms)
  50%    120
  66%    124
  75%    127
  80%    128
  90%    132
  95%    136
  98%    147
  99%    154
 100%    166 (longest request)

real    0m2,500s
user    0m0,260s
sys     0m2,144s
linuxconfig@linuxconfig:~$ date ; time siege -c200 -b -t30S http://172.16.1.74/
Fri Feb 14 10:42:34 AM CET 2025
HANGS

#############################

Configuration: DEFAULT

# cat /proc/$(pgrep lighttpd)/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             7613                 7613                 processes
Max open files            1024                 524288               files
Max locked memory         8388608              8388608              bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       7613                 7613                 signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us


date ; time ab -n 20000 -c 1000 http://172.16.1.74/
Fri Feb 14 10:51:46 AM CET 2025
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.16.1.74 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests


Server Software:        lighttpd/1.4.69
Server Hostname:        172.16.1.74
Server Port:            80

Document Path:          /
Document Length:        1300 bytes

Concurrency Level:      1000
Time taken for tests:   2.529 seconds
Complete requests:      20000
Failed requests:        0
Total transferred:      30260000 bytes
HTML transferred:       26000000 bytes
Requests per second:    7907.78 [#/sec] (mean)
Time per request:       126.458 [ms] (mean)
Time per request:       0.126 [ms] (mean, across all concurrent requests)
Transfer rate:          11684.05 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   31   8.4     30      72
Processing:    32   93  14.6     94     135
Waiting:        1   83  14.6     85     120
Total:         56  124  14.0    125     167

Percentage of the requests served within a certain time (ms)
  50%    125
  66%    130
  75%    133
  80%    134
  90%    136
  95%    147
  98%    159
  99%    163
 100%    167 (longest request)

real    0m2,559s
user    0m0,250s
sys     0m2,206s
linuxconfig@linuxconfig:~$ date ; time siege -c200 -b -t20S http://172.16.1.74/
Fri Feb 14 10:52:03 AM CET 2025
^C
HANGS


##################################
Configuration:
server.max-fds = 4096


# cat /proc/$(pgrep lighttpd)/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             7613                 7613                 processes
Max open files            4096                 4096                 files
Max locked memory         8388608              8388608              bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       7613                 7613                 signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

$ date ; time ab -n 20000 -c 1000 http://172.16.1.74/
Fri Feb 14 10:55:04 AM CET 2025
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.16.1.74 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests


Server Software:        lighttpd/1.4.69
Server Hostname:        172.16.1.74
Server Port:            80

Document Path:          /
Document Length:        1300 bytes

Concurrency Level:      1000
Time taken for tests:   2.542 seconds
Complete requests:      20000
Failed requests:        0
Total transferred:      30260000 bytes
HTML transferred:       26000000 bytes
Requests per second:    7867.80 [#/sec] (mean)
Time per request:       127.100 [ms] (mean)
Time per request:       0.127 [ms] (mean, across all concurrent requests)
Transfer rate:          11624.98 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   60  15.5     57     132
Processing:     9   64  14.5     63     136
Waiting:        0   45  13.8     44     127
Total:         58  124  22.2    122     219

Percentage of the requests served within a certain time (ms)
  50%    122
  66%    127
  75%    132
  80%    134
  90%    139
  95%    174
  98%    199
  99%    210
 100%    219 (longest request)

real    0m2,583s
user    0m0,271s
sys     0m2,158s
linuxconfig@linuxconfig:~$ date ; time siege -c200 -b -t20S http://172.16.1.74/
Fri Feb 14 10:55:11 AM CET 2025
HANGS

##################################

Configuration:
server.max-fds = 65535
server.max-connections = 100000


# cat /proc/$(pgrep lighttpd)/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             7613                 7613                 processes
Max open files            65535                65535                files
Max locked memory         8388608              8388608              bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       7613                 7613                 signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us


$ date ; time ab -n 20000 -c 1000 http://172.16.1.74/
Fri Feb 14 10:57:35 AM CET 2025
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.16.1.74 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests


Server Software:        lighttpd/1.4.69
Server Hostname:        172.16.1.74
Server Port:            80

Document Path:          /
Document Length:        1300 bytes

Concurrency Level:      1000
Time taken for tests:   2.642 seconds
Complete requests:      20000
Failed requests:        0
Total transferred:      30260000 bytes
HTML transferred:       26000000 bytes
Requests per second:    7568.91 [#/sec] (mean)
Time per request:       132.119 [ms] (mean)
Time per request:       0.132 [ms] (mean, across all concurrent requests)
Transfer rate:          11183.37 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   62  14.9     60     124
Processing:     8   67  13.2     67     128
Waiting:        0   37  15.1     36     106
Total:         56  129  16.4    127     184

Percentage of the requests served within a certain time (ms)
  50%    127
  66%    132
  75%    136
  80%    137
  90%    140
  95%    167
  98%    183
  99%    183
 100%    184 (longest request)

real    0m2,685s
user    0m0,293s
sys     0m2,288s
linuxconfig@linuxconfig:~$ date ; time siege -c200 -b -t20S http://172.16.1.74/
Fri Feb 14 10:57:43 AM CET 2025

{       "transactions":                        62022,
        "availability":                       100.00,
        "elapsed_time":                        19.32,
        "data_transferred":                    64.05,
        "response_time":                        0.06,
        "transaction_rate":                  3210.25,
        "throughput":                           3.32,
        "concurrency":                        191.62,
        "successful_transactions":             62023,
        "failed_transactions":                     0,
        "longest_transaction":                  1.64,
        "shortest_transaction":                 0.00
}

real    0m19,348s
user    0m8,170s
sys     0m10,715s
linuxconfig@linuxconfig:~$ date ; time ab -n 20000 -c 1000 http://172.16.1.74/
Fri Feb 14 10:58:11 AM CET 2025
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.16.1.74 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests


Server Software:        lighttpd/1.4.69
Server Hostname:        172.16.1.74
Server Port:            80

Document Path:          /
Document Length:        1300 bytes

Concurrency Level:      1000
Time taken for tests:   2.409 seconds
Complete requests:      20000
Failed requests:        0
Total transferred:      30260000 bytes
HTML transferred:       26000000 bytes
Requests per second:    8301.24 [#/sec] (mean)
Time per request:       120.464 [ms] (mean)
Time per request:       0.120 [ms] (mean, across all concurrent requests)
Transfer rate:          12265.41 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   57  10.2     56      83
Processing:    37   61  10.7     61      88
Waiting:        0   26  13.5     25      86
Total:         54  118  11.2    119     141

Percentage of the requests served within a certain time (ms)
  50%    119
  66%    124
  75%    127
  80%    129
  90%    134
  95%    136
  98%    137
  99%    138
 100%    141 (longest request)

real    0m2,432s
user    0m0,250s
sys     0m2,125s
linuxconfig@linuxconfig:~$ date ; time siege -c200 -b -t30S http://172.16.1.74/
Fri Feb 14 10:58:22 AM CET 2025

{       "transactions":                        91924,
        "availability":                       100.00,
        "elapsed_time":                        29.32,
        "data_transferred":                    94.92,
        "response_time":                        0.06,
        "transaction_rate":                  3135.20,
        "throughput":                           3.24,
        "concurrency":                        193.77,
        "successful_transactions":             91924,
        "failed_transactions":                     0,
        "longest_transaction":                  1.57,
        "shortest_transaction":                 0.00
}

real    0m29,348s
user    0m12,684s
sys     0m15,972s
linuxconfig@linuxconfig:~$ date ; time ab -n 20000 -c 1000 http://172.16.1.74/
Fri Feb 14 10:58:56 AM CET 2025
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.16.1.74 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests


Server Software:        lighttpd/1.4.69
Server Hostname:        172.16.1.74
Server Port:            80

Document Path:          /
Document Length:        1300 bytes

Concurrency Level:      1000
Time taken for tests:   2.372 seconds
Complete requests:      20000
Failed requests:        0
Total transferred:      30260000 bytes
HTML transferred:       26000000 bytes
Requests per second:    8430.34 [#/sec] (mean)
Time per request:       118.619 [ms] (mean)
Time per request:       0.119 [ms] (mean, across all concurrent requests)
Transfer rate:          12456.16 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   56  10.7     54      97
Processing:    28   61  12.8     60     103
Waiting:        0   40  15.3     38      96
Total:         47  117  14.4    117     159

Percentage of the requests served within a certain time (ms)
  50%    117
  66%    122
  75%    125
  80%    129
  90%    137
  95%    141
  98%    147
  99%    150
 100%    159 (longest request)

real    0m2,391s
user    0m0,233s
sys     0m2,064s
linuxconfig@linuxconfig:~$ date ; time siege -c200 -b -t40S http://172.16.1.74/
Fri Feb 14 10:59:05 AM CET 2025
^C
HANGS

Lubos

Thank you for taking a look.

Are you sure that lighttpd hung, or is it siege which hung? Did you try to connect to lighttpd with a separate process while siege was running? e.g. using curl

My quick test on 127.0.0.1 suggests that siege -c200 results in more than 200 concurrent connections, which might indicate a bug or unexpected behavior from siege.

The output from siege is benchmarking the terminal speed. You may see a huge difference in performance if you direct the output to a file. time siege -c200 -b -t40S http://172.16.1.74/ > /tmp/siege.out

Debian is almost always out-of-date. Debian 12 ships with lighttpd 1.4.69, which was released Feb 2023, over two years ago. Latest lighttpd is lighttpd 1.4.77. I am testing with lighttpd 1.4.77, but will try to reproduce what you are seeing with siege in lighttpd 1.4.69.

I’ll try to post minor configuration changes for other servers later this weekend.

Cheers, Glenn

FYI: I changed the siege defaults in ~/.siege/siege.conf to instead be verbose = false and color = off to avoid benchmarking the terminal.