Performance Benchmark on a Sylius Application
Scaleway DEV1-S (2 vCPUs, 2 GB RAM)
Sylius Standard (PHP 8.3)
Scaleway DB-DEV-S (2 vCPUs, 2 GB RAM, MySQL)
wrk on a separate DEV1-S instance
Nginx + PHP-FPM: pm.max_children = 15
FrankenPHP (Worker Mode): worker.num = 36
FrankenPHP (Thread Mode): num_threads = 36
Before each 30-second benchmark, a warmup phase was executed. This involved calling the API endpoint with `curl` to ensure application caches were primed, followed by a preliminary 10-second `wrk` run with 100 connections.
The benchmarks reveal a stark difference in performance between the server configurations, particularly highlighting the strength of FrankenPHP's worker mode.
### FrankenPHP (Thread Mode, num_threads = 36) ###
# 100 Connections
root@attacker:~# wrk -t4 -c100 -d30s --latency --timeout 20s http://51.159.157.40/api/v2/shop/products/Summer_Picnic_Charm
Running 30s test @ http://51.159.157.40/api/v2/shop/products/Summer_Picnic_Charm
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.56s 852.58ms 5.99s 87.38%
Req/Sec 10.15 9.58 50.00 75.00%
Latency Distribution
50% 4.72s
75% 5.10s
90% 5.29s
99% 5.78s
610 requests in 30.05s, 1.95MB read
Requests/sec: 20.30
Transfer/sec: 66.30KB
# 200 Connections
root@attacker:~# wrk -t4 -c200 -d30s --latency --timeout 20s http://51.159.157.40/api/v2/shop/products/Summer_Picnic_Charm
Running 30s test @ http://51.159.157.40/api/v2/shop/products/Summer_Picnic_Charm
4 threads and 200 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 8.34s 2.52s 10.68s 82.23%
Req/Sec 14.31 14.70 90.00 85.53%
Latency Distribution
50% 9.58s
75% 9.78s
90% 9.97s
99% 10.31s
602 requests in 30.05s, 1.91MB read
Requests/sec: 20.03
Transfer/sec: 65.11KB
---
### Nginx + PHP-FPM ###
# 100 Connections
root@attacker:~# wrk -t4 -c100 -d30s --latency --timeout 20s http://51.159.157.40/api/v2/shop/products/Summer_Picnic_Charm
Running 30s test @ http://51.159.157.40/api/v2/shop/products/Summer_Picnic_Charm
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.27s 901.33ms 4.98s 89.83%
Req/Sec 14.72 10.81 50.00 74.57%
Latency Distribution
50% 4.54s
75% 4.63s
90% 4.72s
99% 4.87s
649 requests in 30.05s, 2.06MB read
Requests/sec: 21.60
Transfer/sec: 70.35KB
# 200 Connections
root@attacker:~# wrk -t4 -c200 -d30s --latency --timeout 20s http://51.159.157.40/api/v2/shop/products/Summer_Picnic_Charm
Running 30s test @ http://51.159.157.40/api/v2/shop/products/Summer_Picnic_Charm
4 threads and 200 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 7.77s 2.46s 9.45s 83.08%
Req/Sec 15.02 10.39 60.00 78.49%
Latency Distribution
50% 9.04s
75% 9.11s
90% 9.18s
99% 9.30s
656 requests in 30.06s, 2.09MB read
Requests/sec: 21.82
Transfer/sec: 71.09KB
---
### FrankenPHP (Worker Mode, worker.num = 36) ###
# 100 Connections
root@attacker:~# wrk -t4 -c100 -d30s --latency --timeout 20s http://51.159.157.40/api/v2/shop/products/Summer_Picnic_Charm
Running 30s test @ http://51.159.157.40/api/v2/shop/products/Summer_Picnic_Charm
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.69s 321.95ms 2.57s 71.90%
Req/Sec 20.57 19.25 131.00 80.33%
Latency Distribution
50% 1.65s
75% 1.93s
90% 2.11s
99% 2.36s
1733 requests in 30.06s, 5.46MB read
Requests/sec: 57.65
Transfer/sec: 186.07KB
# 200 Connections
root@attacker:~# wrk -t4 -c200 -d30s --latency --timeout 20s http://51.159.157.40/api/v2/shop/products/Summer_Picnic_Charm
Running 30s test @ http://51.159.157.40/api/v2/shop/products/Summer_Picnic_Charm
4 threads and 200 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 2.92s 577.77ms 3.89s 78.93%
Req/Sec 24.44 26.24 200.00 88.45%
Latency Distribution
50% 3.02s
75% 3.28s
90% 3.50s
99% 3.71s
1932 requests in 30.05s, 6.09MB read
Requests/sec: 64.29
Transfer/sec: 207.51KB