================================================================================ CPU Intel(R) Core(TM) i9-13900K @ 5.5 GHz, performance governor CPU security patches all ON RAM 192 GB, DDR5 5600 MT/s SSD 2 TB NVMe SSD UFW Firewall ON OS Ubuntu 24.04 LTS (with all security updates) FDs prlimit --pid=$$ --nofile=1048576 TST NGINX's wrk2, see why here: http://gwan.com/blog/20250417.html ================================================================================ NGINX 1.24.0 => [89k-944k] RPS, 29k socket errors, 648 non-2xx responses -------------------------------------------------------------------------------- RPS by number of concurrent clients: 1: 89k RPS 1k: 944k RPS --> NGINX AND LITESPEED peak RPS (G-WAN's peak: 10k clients) 10k: 635k RPS 20k: 561k RPS, Non-2xx or 3xx responses: 8 30k: 489k RPS, Non-2xx or 3xx responses: 29 40k: 474k RPS, Non-2xx or 3xx responses: 611, Socket errors: timeout 29040 ---------------- Total 2,631k RPS ================================================================================ Before the test -------------------------------------------------------------------------------- - running nginx process(es): PID PPID THRDS %CPU VIRT RSS SHRD EXE 2556 1 1 0.0 20.9 MB 1.3 MB 512.0 KB nginx: master process /usr/sbin/nginx -g daemon on; master_process on; 2557 2556 1 0.0 22.9 MB 4.5 MB 3.2 MB nginx: worker process 2558 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2559 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2560 2556 1 0.0 22.9 MB 3.8 MB 2.5 MB nginx: worker process 2561 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2562 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2563 2556 1 0.0 22.9 MB 3.8 MB 2.5 MB nginx: worker process 2564 2556 1 0.0 22.9 MB 3.8 MB 2.5 MB nginx: worker process 2565 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2566 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2567 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2569 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2570 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2571 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2572 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2573 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2574 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2575 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2576 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2577 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2578 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2579 2556 1 0.0 22.9 MB 3.8 MB 2.5 MB nginx: worker process 2580 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2581 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2582 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2583 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2584 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2585 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2586 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2587 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2588 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process 2589 2556 1 0.0 22.9 MB 4.0 MB 2.7 MB nginx: worker process ================ Total: 4.5 + (4 * 3.8) + (27 * 4.0) + 3.2 = 130.9 MB -------------------------------------------------------------------------------- After the test -------------------------------------------------------------------------------- - running nginx process(es): PID THRDS %CPU VIRT RSS SHRD EXE 2595 1 0.0 21.6 MB 3.1 MB 2.0 MB nginx: master process /usr/sbin/nginx -g daemon on; master_process on; 205137 1 11.8 23.3 MB 4.2 MB 2.7 MB nginx: worker process 205138 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205139 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205140 1 1.5 23.3 MB 4.2 MB 2.7 MB nginx: worker process 205141 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205142 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205143 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205144 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205145 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205146 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205147 1 1.5 23.3 MB 4.7 MB 3.0 MB nginx: worker process 205148 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205149 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205150 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205151 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205152 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205153 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205154 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205155 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205156 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205157 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205158 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205159 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205160 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205161 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205162 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205163 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205164 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205165 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205166 1 1.5 23.3 MB 4.4 MB 3.0 MB nginx: worker process 205167 1 1.5 23.3 MB 4.7 MB 3.0 MB nginx: worker process 205168 1 1.5 23.3 MB 4.2 MB 2.7 MB nginx: worker process ================ Total: (3 * 4.2) + (27 * 4.4) + (2 * 4.7) + 3.0 = 143.8 MB ================================================================================ wrk2 -t1 -c1 -R100m "http://127.0.0.1:80/100.html" Initialised 1 threads in 0 ms. Running 10s test @ http://127.0.0.1:80/100.html 1 threads and 1 connections Thread Stats Avg Stdev Max +/- Stdev Latency 5.01s 2.88s 9.99s 0.02% Req/Sec -nan -nan 0.00 0.00% 890786 requests in 10.00s, 293.93MB read Requests/sec: 89077.45 Transfer/sec: 29.39MB ================================================================================ wrk2 -t1k -c1k -R2m "http://127.0.0.1:80/100.html" Initialised 1000 threads in 55 ms. Running 10s test @ http://127.0.0.1:80/100.html 1000 threads and 1000 connections Thread Stats Avg Stdev Max +/- Stdev Latency 2.59s 1.55s 6.13s 0.03% Req/Sec -nan -nan 0.00 0.00% 9437765 requests in 9.99s, 3.04GB read Requests/sec: 944571.26 Transfer/sec: 311.68MB ================================================================================ wrk2 -t10k -c10k -R1m "http://127.0.0.1:80/100.html" Initialised 10000 threads in 2234 ms. Running 10s test @ http://127.0.0.1:80/100.html 10000 threads and 10000 connections Thread Stats Avg Stdev Max +/- Stdev Latency 478.73ms 886.27ms 6.38s 0.01% Req/Sec -nan -nan 0.00 0.00% 6710307 requests in 10.55s, 2.16GB read Requests/sec: 635791.27 Transfer/sec: 209.79MB ================================================================================ wrk2 -t20k -c20k -R1m "http://127.0.0.1:80/100.html" Initialised 20000 threads in 8285 ms. Running 10s test @ http://127.0.0.1:80/100.html 20000 threads and 20000 connections Thread Stats Avg Stdev Max +/- Stdev Latency 793.36ms 978.31ms 5.74s 0.02% Req/Sec -nan -nan 0.00 0.00% 6552738 requests in 11.67s, 2.11GB read Non-2xx or 3xx responses: 8 Requests/sec: 561534.68 Transfer/sec: 185.29MB ================================================================================ wrk2 -t30k -c30k -R1m "http://127.0.0.1:80/100.html" Initialised 30000 threads in 18051 ms. Running 10s test @ http://127.0.0.1:80/100.html 30000 threads and 30000 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.62s 1.04s 4.00s 0.02% Req/Sec -nan -nan 0.00 0.00% 6159437 requests in 12.59s, 1.98GB read Non-2xx or 3xx responses: 29 Requests/sec: 489276.09 Transfer/sec: 161.45MB ================================================================================ wrk2 -t40k -c40k -R100m "http://127.0.0.1:80/100.html" Initialised 40000 threads in 31531 ms. Running 10s test @ http://127.0.0.1:80/100.html 40000 threads and 40000 connections Thread Stats Avg Stdev Max +/- Stdev Latency 4.57s 2.85s 9.84s 0.05% Req/Sec 0.00 0.00 0.00 0.00% 4594869 requests in 9.69s, 1.48GB read Socket errors: connect 0, read 32, write 0, timeout 29040 Non-2xx or 3xx responses: 611 Requests/sec: 474329.13 Transfer/sec: 156.52MB ================================================================================ Conclusion -------------------------------------------------------------------------------- NGINX, despite pre-allocating workers and RAM, does not scale on middle and high concurrencies. Compared to NGINX, LITESPEED is faster WITHOUT CONCURRENCY, but under-performs by a factor two or more for all concurrencies, and has many more socket errors than NGINX. NGINX starts with a higher RAM usage but closes the test with a lower memory consumption than LITESPEED. Compared to NGINX, G-WAN is faster WITHOUT CONCURRENCY, and much, much faster (without errors) on the [1k-40k] concurrency range (G-WAN being up to 3 orders of magnitude faster than NGINX). At startup, G-WAN consumed 170x less RAM than NGINX. At the test's end, G-WAN has consumed 4x more RAM than NGINX - while consistantly delivering hundreds of millions of RPS instead of NGINX and LITESPEED's hundreds of thousand RPS. ================================================================================