ab with 500 concurrent, no keepalives: Requests per second: 13428.16 [#/sec] (mean)
ab with 500 concurrent, keepalives: Requests per second: 14403.98 [#/sec] (mean)
Keepalives allow the browser to maintain a socket between the browser and server and request multiple objects. So, rather than having to do a connect/teardown for each object, you remove that overhead. Some versions of Apache in conjunction with php and mysql_pconnect had issues in the past that might explain the OP's issues with keepalives, but, it has piqued my curiosity. In general, keepalives should reduce communication handling and allow more throughput.
ab with 500 concurrent, keepalives: Requests per second: 14403.98 [#/sec] (mean)
Keepalives allow the browser to maintain a socket between the browser and server and request multiple objects. So, rather than having to do a connect/teardown for each object, you remove that overhead. Some versions of Apache in conjunction with php and mysql_pconnect had issues in the past that might explain the OP's issues with keepalives, but, it has piqued my curiosity. In general, keepalives should reduce communication handling and allow more throughput.