This is the first post in (hopefully) a series of posts on real world solutions to problems that come up in projects I’ve worked on. The post won’t mention anything specific about who the project was for, as that doesn’t actually matter, but its more about the solution that was implemented.

On this project, for a popular website, when the site initially launched there were no performance problems and everything seemed to be working as it had during the development and testing phases.

However, as the site received more press and media coverage and subsequently more usage, performance issues started appearing – specifically, images were taking a long time to display – and sometimes not displaying at all – and some users were reporting 502 errors.

After a lot of investigation and head-scratching, it was found that the issue was caused by a setting in the Apache network configuration having a setting lower than was needed for the task at hand. This was the ThreadsPerChild setting. With a setting too low, this was causing request queuing which then got worse under higher loads at certain times of the day.

After trying a couple of tweaks to this setting, plus a corresponding change to the ThreadLimit setting, the issues disappeared.