Назад | Перейти на главную страницу

Почему у меня так много процессов apache2?

У меня есть машина 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