httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rainer Jung <rainer.j...@kippdata.de>
Subject Re: MPM sizing defaults and config
Date Tue, 15 Jun 2010 21:42:33 GMT
On 15.06.2010 23:09, William A. Rowe Jr. wrote:
> As a broad general question - why not equivalent number of MaxClients
> across all MPMs?

I was uncertain about that. Users often tend to try to fix performance 
problems by adding concurrency to the web server. If your web server is 
configured very tight, then this will help. But if you actually have a 
throughput problem (slow backends, network etc.), then allowing even 
more concurrency will make things worse.

So I wanted to stick away from sizing to what's possible and stay closer 
to what's reasonable. Concerning Unix my gut feeling was that 256 
processes (prefork) and 16x25=400 threads doesn't put much pressure on 
system resources of modern entry servers. I raised the MaxClients for 
the threaded MPMs, because I expect them to be a bit cheaper. But no 
strong opinion here about the best numbers. Keeping MaxClients in sync 
would make the MPMs better comparable out of the box, but on the other 
hand precisely this type of comparison might not make much sense.

> On 6/15/2010 4:03 PM, Rainer Jung wrote:
>> The default configuration for various MPMs
>> differs from the example configuration file
>> conf/extra/httpd-mpm.conf.
>>
>> Before bringing those two in sync, I want
>> to propose the values we want to use as new
>> defaults as well as for the extras configuration
>> file.
>>
>> Prefork
>> =======            conf  default   proposed
>> StartServers          5        5          5
>> MinSpareServers       5        5          3
>> MaxSpareServers      10       10         15
>> MaxClients          150      256        256
>> MaxRequestsPerChild   0    10000          0
>
> This seems bursty - can't we raise MaxSpare to at least 50?

Right, we should in order to prevent continuous forking and dying.

>> Worker/Event
>> ============       conf  default   proposed
>> StartServers          2        3          2
>> MinSpareThreads      25       75         25
>> MaxSpareThreads      75      250        100
>> MaxClients          150      400        400
>> ThreadsPerChild      25       25         25
>> MaxRequestsPerChild   0    10000          0
>
> If threaded, and stable, why not some 50 or 100 threads per child?

OK, especially since for Event I think that there is a problem of 
correctly balancing load between child processes. For worker it is 
clear, when a child is saturated, i.e. when each thread has a connection.

For event it's quite possible, that the idleness of worker threads 
fluctuates. So bigger thread pools (per process) might reduce risk of 
starvation.

>> Simple
>> ======             conf  default   proposed
>> SimpleProcCount       5        5          5?
>> SimpleThreadCount     5        5          5?
>>
>> WinNT
>> =====              conf  default   proposed
>> ThreadsPerChild     150       64        150
>> MaxRequestsPerChild   0        0          0
>
> +1
>
> ThreadStackSize could probably be cut to 128k default (256k processwide-default).

Only the Netware MPM uses a thread stack size different from the OS 
default at the moment (OK, Windows uses hard-coded 65536 for the service 
thread and a stderr_thread but not for the worker threads). So do we 
want to now switch over to an httpd specific value or should we stick 
with system default?

>> Netware
>> =======            conf  default   proposed
>> StartThreads        250       50         50
>> MinSpareThreads      25       10         25
>> MaxSpareThreads     250      100        100
>> MaxThreads         1000     2048       1000
>> MaxRequestsPerChild   0        0          0
>> ThreadStackSize   65536    65536      65536
>> MaxMemFree          100        0          - (remove)
>
> ThreadStackSize seems a bit dicey, would rather see 128k default.

Because it is the only MPM with non system default used, I wondered 
whether there's a bit of history behind that value.

>> OS2
>> ===                conf  default   proposed
>> StartServers          2        2          2
>> MinSpareThreads       5        5          5
>> MaxSpareThreads      10       10         20
>> MaxRequestsPerChild   0    10000          0
>
> ThreadsPerChild?

i read the code like this: number of threads per child is dynamic. 
Maximum is not configurable but instead defined by HARD_THREAD_LIMIT, 
which is set to 256 in the MPM source.

Rainer

Mime
View raw message