У меня есть машина Debian 6.0.1 с GNU / kFreeBSD 8.1-1-amd64 и Apache. Я установил apache2-mpm-worker
с помощью apt-get
, и мой apache2.conf
файл содержит:
<IfModule mpm_prefork_module>
StartServers 4
MinSpareServers 2
MaxSpareServers 5
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
<IfModule mpm_worker_module>
StartServers 1
MinSpareThreads 2
MaxSpareThreads 20
ThreadLimit 64
ThreadsPerChild 20
MaxClients 100
MaxRequestsPerChild 400
</IfModule>
Итак, я должен видеть только пару запущенных процессов Apache. Однако это больше похоже на то, что я запускаю prefork, потому что вместо многих потоков у меня есть много процессов:
root@garrison:/# ps awwwwx | grep apache
78438 ? S+ 0:00 grep apache
78424 ? S 0:00 /usr/sbin/apache2 -k start
78423 ? S 0:00 /usr/sbin/apache2 -k start
78422 ? S 0:00 /usr/sbin/apache2 -k start
78421 ? S 0:00 /usr/sbin/apache2 -k start
78420 ? S 0:00 /usr/sbin/apache2 -k start
78419 ? S 0:00 /usr/sbin/apache2 -k start
78418 ? S 0:00 /usr/sbin/apache2 -k start
78417 ? S 0:00 /usr/sbin/apache2 -k start
78416 ? S 0:00 /usr/sbin/apache2 -k start
78415 ? S 0:00 /usr/sbin/apache2 -k start
78414 ? S 0:00 /usr/sbin/apache2 -k start
78413 ? S 0:00 /usr/sbin/apache2 -k start
78412 ? S 0:00 /usr/sbin/apache2 -k start
78411 ? S 0:00 /usr/sbin/apache2 -k start
78410 ? S 0:00 /usr/sbin/apache2 -k start
78409 ? S 0:00 /usr/sbin/apache2 -k start
78408 ? S 0:00 /usr/sbin/apache2 -k start
78407 ? S 0:00 /usr/sbin/apache2 -k start
78406 ? S 0:00 /usr/sbin/apache2 -k start
78405 ? S 0:00 /usr/sbin/apache2 -k start
78404 ? S 0:00 /usr/sbin/apache2 -k start
78402 ? S 0:00 /usr/sbin/apache2 -k start
78401 ? S 0:00 /usr/sbin/apache2 -k start
78400 ? S 0:00 /usr/sbin/apache2 -k start
78397 ? Ss 0:00 /usr/sbin/apache2 -k start
Тем не менее, в Apache явно установлен рабочий модуль, а не модуль prefork:
root@garrison:/HostRAID/netboot/IntelNetboot.nbi# /usr/sbin/apache2 -l
Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
worker.c
http_core.c
mod_so.c
Что дает? Почему у меня так много apache2
процессы? Этот сервер находится под нет нагрузка. (То есть никаких http-запросов)
Я не уверен, но твой ps
вывод напомнил мне Linux 2.4 - потоки раньше появлялись как процессы на ps
до перехода от Потоки Linux к Собственная библиотека потоков Posix.
Эта цитата из эта тема вроде подтверждает мои подозрения:
В GNU / kFreeBSD потоки являются клонами процессов, как и в Linux серии 2.4.
Если это так, это не означает, что рабочий работает со сбоями. Это не разветвление - это нити, которые вы видите. Документы Apache по ThreadsPerChild
:
Эта директива устанавливает количество потоков, создаваемых каждым дочерним процессом. Потомок создает эти потоки при запуске и больше никогда не создает. (...) Значение по умолчанию для ThreadsPerChild - 64 при использовании с mpm_winnt и 25 при использовании с другими.
http://httpd.apache.org/docs/2.0/mod/mpm_common.html#threadsperchild