ThreadsPerChild in Apache2 vs THR in top using Event MPM

Julian Elischer julian at
Thu Jan 8 18:40:25 UTC 2009

craig at wrote:
> Thank you both for replying.  Yes they wait in kserel
> and yes libpthread is shown in the ldd output.
> Is there anything written anywhere on the M:N mechanism?
> Particularly something that would tell me
> 1) whether the number of kernel threads (11) is derived
> from the number of user threads (25), or if not, what
> controls it?

The 11 is made up of:
the number of threads actually waiting in the kernel for input,
plus the extra signal thread
plus one that is waiting to be woken up as it has no work
plus, depending on a number of factors one or two more.

Threads  that are waiting in userland for a condition variable
will not show up at all as they have no kernel resources allocated.

> 2) should I adjust the ThreadsPerChild number from 25
> given this environment?


> Thanks again,
> cmac
> On Jan 7, 2009, at 5:36 PM, Julian Elischer wrote:
>> It depends on which threading library you are using
>> if you see (in top -H) threads waiting in kserel
>> tehn you are using the M:N library, where not every thread in the
>> process makes a kernel thread until it's needed.
>> if you link with libthr instead (see man libmap)
>> you may see different results. (and performance)
>> libthr is the default in 7.x.
> On Jan 7, 2009, at 5:29 PM, Alfred Perlstein wrote:
>> I think 6.3 uses "libkse" which is N:M threads library, so top(1)
>> can't know how many user threads there are, just kernel threads.
>> Do this:
>>  ldd /path/to/httpd
>> If you see libpthread, you're using "kse" and won't see the exact
>> number of threads.
> _______________________________________________
> freebsd-threads at mailing list
> To unsubscribe, send any mail to "freebsd-threads-unsubscribe at"

More information about the freebsd-threads mailing list