11.3 Setting MinSpareServers, MaxSpareServers, and StartServers
With mod_perl enabled, it might take as much as 20 seconds from the time you start the server until it is ready to serve incoming requests. This delay depends on the OS, the number of preloaded modules, and the process load of the machine. It's best to set StartServers and MinSpareServers to high numbers, so that if you get a high load just after the server has been restarted, the fresh servers will be ready to serve requests immediately.
To maximize the benefits of mod_perl, you don't want to kill servers when they are idle; rather, you want them to stay up and available to handle new requests immediately. We think an ideal configuration is to set MinSpareServers and MaxSpareServers to similar (or even the same) values. Having MaxSpareServers close to MaxClients will completely use all of your resources (if MaxClients has been chosen to take full advantage of the resources) and make sure that at any given moment your system will be capable of responding to requests with the maximum speed (assuming that the number of concurrent requests is not higher than MaxClients—otherwise, some requests will be put on hold).
If you keep a small number of servers active most of the time, keep StartServers low. Keep it low especially if MaxSpareServers is also low, as if there is no load Apache will kill its children before they have been utilized at all. If your service is heavily loaded, make StartServers close to MaxClients, and keep MaxSpareServers equal to MaxClients.
If your server performs other work besides running the mod_perl-enabled server—for example, an SQL server—make MinSpareServers low so the memory of unused children will be freed when the load is light. If your server's load varies (i.e., you get loads in bursts) and you want fast responses for all clients at any time, you will want to make it high, so that new children will be respawned in advance and able to handle bursts of requests.
For MaxSpareServers, the logic is the same as for MinSpareServers—low if you need the machine for other tasks, high if it's a host dedicated to mod_perl servers and you want a minimal delay between the request and the response.