In the end, it turned out kind of useless as a “real world” test. The server doesn’t have L3 cache, and the client is a virtual machine. I also didn’t run a large number of trials, nor tune the server stacks for optimum performance. In fact, the tunings I tried had no effect, at best.
tl;dr conclusions:
- HHVM proxygen is almost completely amazing. If you have the option, it is probably what you want. It just crashes hard when concurrency exceeds its open file limit.
- nginx+FastCGI hits a resource limit somewhere, and starts failing requests at higher concurrency, like 160.
- apache+FastCGI does the same… but the limit is higher, between 256 and 384. The price for this is that it’s only 86% as many requests per second.
- Providing more FastCGI workers makes the errors hit sooner, but ramp up more slowly.
- I’m really disappointed in nginx. I expected more. A lot more.