When it comes to building scalable web applications, backend performance plays a critical role in user experience. I recently ran a series of benchmarks to determine the best PHP runtime environment for handling 1,000 concurrent users in real-time.
Ready to run your business in one place?
WebifyGO brings your contacts, pipeline, invoicing, campaigns, and support into one CRM. Start free — no credit card required.
Start Your Free Trial →We tested three different setups:
- FrankenPHP – a modern, experimental PHP runtime built on top of Caddy.
- Caddy + PHP-FPM – combining the performance of Caddy as a web server with PHP-FPM.
- Apache + PHP-FPM – the more traditional stack using PHP-FPM with Apache.
Test Setup
- Server Specs: 16 CPU cores, 40GB RAM.
- Database: MySQL 8 with optimized
innodb_buffer_pool_sizeand caching parameters. - Load Testing Tool: ApacheBench (ab) and wrk for simulating 1k concurrent users.
- Codebase: A real-world PHP project with sessions and database queries.
FrankenPHP Results
FrankenPHP is lightweight and very fast in single-core tests. However, under high concurrency (1k users), CPU usage spiked up to 1500%, which made resource usage unpredictable. While it handled requests quickly, the stability wasn’t consistent in production-like conditions.
Pros:
- Easy to run via Caddy.
- Built-in support for modern features.
Cons:
- High CPU overhead under heavy concurrency.
- Experimental – not yet production-proven for enterprise workloads.
Caddy + PHP-FPM Results
Caddy provided simplicity in configuration, automatic HTTPS, and good load distribution. Combined with PHP-FPM, it was stable – but still slightly less efficient compared to Apache with PHP-FPM in our tests.
Pros:
- Modern and easy configuration.
- Good TLS handling out of the box.
Cons:
- Higher latency compared to PHP-FPM on Apache.
- PHP worker handling not as efficient.
Apache + PHP-FPM Results
PHP-FPM with Apache showed the best balance of CPU usage, memory consumption, and request throughput. Under 1k concurrent users, CPU usage capped around 500%, which is significantly lower than FrankenPHP’s 1500%.
Pros:
- Stable and predictable under heavy load.
- Mature ecosystem, widely documented.
- Tunable via
pm.max_children,opcache, and Redis sessions.
Cons:
- Slightly higher memory footprint than Caddy.
Final Verdict: PHP-FPM Wins
After extensive testing, PHP-FPM proved to be the most reliable and performant solution for handling 1,000 real-time users. While FrankenPHP and Caddy are exciting technologies with modern benefits, PHP-FPM remains the production-grade choice for high-concurrency environments.
If you’re aiming for real-time scalability with thousands of users, optimizing PHP-FPM + database tuning + Redis session handling is still the safest and most efficient path forward.
I recommend starting with PHP-FPM for mission-critical applications, while keeping an eye on FrankenPHP and Caddy as they evolve.