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

Уменьшить количество процессов Apache

Я использую Apache 2.2. У меня 10 apache процессы работают, и это требует моих ограниченных ресурсов.

Я искал параметр конфигурации, который контролирует количество порождаемых процессов, но мне нужна помощь. Это MaxRequestWorkers? Это ThreadsPerChild? Что-то другое? (Похоже, что ни то, ни другое не установлено в моих файлах конфигурации.)

Вот пример одного из моих apache процессы:

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY        TIME CMD
5 S    33 26099 25513  0  80   0 - 56951 poll_s ?          1:42 /usr/sbin/apache2 -k start

Редактировать:

Мне жаль. Я использую apache 2.2, а не 2.4.

список модов:

lrwxrwxrwx 1 root root 28 Sep  5  2014 alias.conf -> ../mods-available/alias.conf
lrwxrwxrwx 1 root root 28 Sep  5  2014 alias.load -> ../mods-available/alias.load
lrwxrwxrwx 1 root root 33 Sep  5  2014 auth_basic.load -> ../mods-available/auth_basic.load
lrwxrwxrwx 1 root root 33 Sep  5  2014 authn_file.load -> ../mods-available/authn_file.load
lrwxrwxrwx 1 root root 36 Sep  5  2014 authz_default.load -> ../mods-available/authz_default.load
lrwxrwxrwx 1 root root 38 Sep  5  2014 authz_groupfile.load -> ../mods-available/authz_groupfile.load
lrwxrwxrwx 1 root root 33 Sep  5  2014 authz_host.load -> ../mods-available/authz_host.load
lrwxrwxrwx 1 root root 33 Sep  5  2014 authz_user.load -> ../mods-available/authz_user.load
lrwxrwxrwx 1 root root 32 Sep  5  2014 autoindex.conf -> ../mods-available/autoindex.conf
lrwxrwxrwx 1 root root 32 Sep  5  2014 autoindex.load -> ../mods-available/autoindex.load
lrwxrwxrwx 1 root root 26 Sep  5  2014 cgi.load -> ../mods-available/cgi.load
lrwxrwxrwx 1 root root 30 Sep  5  2014 deflate.conf -> ../mods-available/deflate.conf
lrwxrwxrwx 1 root root 30 Sep  5  2014 deflate.load -> ../mods-available/deflate.load
lrwxrwxrwx 1 root root 26 Sep  5  2014 dir.conf -> ../mods-available/dir.conf
lrwxrwxrwx 1 root root 26 Sep  5  2014 dir.load -> ../mods-available/dir.load
lrwxrwxrwx 1 root root 26 Sep  5  2014 env.load -> ../mods-available/env.load
lrwxrwxrwx 1 root root 27 Sep  5  2014 mime.conf -> ../mods-available/mime.conf
lrwxrwxrwx 1 root root 27 Sep  5  2014 mime.load -> ../mods-available/mime.load
lrwxrwxrwx 1 root root 34 Sep  5  2014 negotiation.conf -> ../mods-available/negotiation.conf
lrwxrwxrwx 1 root root 34 Sep  5  2014 negotiation.load -> ../mods-available/negotiation.load
lrwxrwxrwx 1 root root 32 Sep 12  2014 passenger.conf -> ../mods-available/passenger.conf
lrwxrwxrwx 1 root root 32 Sep 12  2014 passenger.load -> ../mods-available/passenger.load
lrwxrwxrwx 1 root root 27 Sep  5  2014 php5.conf -> ../mods-available/php5.conf
lrwxrwxrwx 1 root root 27 Sep  5  2014 php5.load -> ../mods-available/php5.load
lrwxrwxrwx 1 root root 33 Sep  5  2014 reqtimeout.conf -> ../mods-available/reqtimeout.conf
lrwxrwxrwx 1 root root 33 Sep  5  2014 reqtimeout.load -> ../mods-available/reqtimeout.load
lrwxrwxrwx 1 root root 40 Sep 14  2014 rewrite.load -> /etc/apache2/mods-available/rewrite.load
lrwxrwxrwx 1 root root 31 Sep  5  2014 setenvif.conf -> ../mods-available/setenvif.conf
lrwxrwxrwx 1 root root 31 Sep  5  2014 setenvif.load -> ../mods-available/setenvif.load
lrwxrwxrwx 1 root root 36 Jun  7  2015 ssl.conf -> /etc/apache2/mods-available/ssl.conf
lrwxrwxrwx 1 root root 36 Jun  7  2015 ssl.load -> /etc/apache2/mods-available/ssl.load
lrwxrwxrwx 1 root root 29 Sep  5  2014 status.conf -> ../mods-available/status.conf
lrwxrwxrwx 1 root root 29 Sep  5  2014 status.load -> ../mods-available/status.load

Это зависит от того, какой модуль mpm (mpm_worker / mpm_prefork / mpm_event) использует ваш apache. Если вы не уверены, опубликуйте вывод cat /etc/apache2/mods-enabled/mpm*.conf что показывает количество StartServers / MinSpareServers / MaxSpareServers, MaxRequestWorkers и возможно ThreadsPerChild и ThreadLimit. Если имена файлов в вашем дистрибутиве Linux должны отличаться, опубликуйте вывод ваших включенных модулей ls -l /etc/apache2/mods-enabled.

Он должен выглядеть примерно так и объясняет себя (Debian, Apache2.4):

root@debian:/# cat /etc/apache2/mods-enabled/mpm*.conf
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxRequestWorkers: maximum number of server processes allowed to start
# MaxConnectionsPerChild: maximum number of requests a server process serves

<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers       5
    MaxSpareServers      10

    # same as MaxClients in Apache 2.2
    MaxRequestWorkers     150
    MaxConnectionsPerChild   0
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Видеть Уменьшение использования памяти Apache и среднего значения размера процесса

В документации говорится (как описано по ссылке выше):

Вы можете и должны управлять настройкой MaxClients, чтобы ваш сервер не порождал так много дочерних элементов, что он начал бы менять местами. Процедура для этого проста: определите размер вашего среднего процесса Apache, просмотрев список процессов с помощью такого инструмента, как top, и разделите его на общую доступную память, оставив место для других процессов. https://httpd.apache.org/docs/2.2/misc/perf-tuning.html

Пример:

Tasks: 207 total,   1 running, 206 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.4 us,  0.8 sy,  0.0 ni, 96.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 16307588 total, 14360744 free,  1188636 used,   758208 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 14686936 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                 
 6567 www-data  20   0  296028  15288   5616 S   0.0  0.1   0:00.07 apache2                                                                 
 6569 www-data  20   0  296040  15360   5676 S   0.0  0.1   0:00.08 apache2                                                                 
 6571 www-data  20   0  295996  15200   5676 S   0.0  0.1   0:00.07 apache2                                                                 
 6572 www-data  20   0  296028  15348   5676 S   0.0  0.1   0:00.08 apache2                                                                 
 6573 www-data  20   0  296040  15356   5676 S   0.0  0.1   0:00.07 apache2

Запуск классного скрипта со связанной страницы выше дает мне:

root@debian:~# ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Process Size (MB): "x/((y-1)*1024)}'
Apache Memory Usage (MB): 100.711
Average Process Size (MB): 16.7852

Примечание. «Средний размер процесса» - это значение «RES» при запуске top.

Чтобы определить MaxClients (он же MaxRequestWorkers) Мне нужно рассчитать:

Maxclients=X/Y where
   X=Max. Available Memory Reserved for Apache
   Y=Average Process Size

Проверьте, какой модуль mpm (mpm_worker / mpm_prefork / mpm_event) использует ваш apache, запустив: httpd -V

С этой информацией войдите на сайт apache (например, prefork, worker или event https://httpd.apache.org/docs/2.4/mod/prefork.html или worker.html или event.html), чтобы просмотреть требуемую конфигурацию. Я использую префорк со следующими настройками:

<IfModule mpm_prefork_module>
     ServerLimit         800
     StartServers        5 
     MinSpareServers     10 
     MaxRequestWorkers   800  
</IfModule>

где

  • ServerLimit = максимальное значение MaxRequestWorkers
  • StartServers = количество дочерних серверов, созданных при запуске
  • MinSpareSevers = минимальное количество незанятых процессов, т.е. процесс не обрабатывает запрос (по умолчанию = 5)
  • MaxSpareServers = максимальное количество незанятых процессов, т.е. процесс не обрабатывает запрос (по умолчанию = 10). Если неактивный процесс> MaxSpareServers, родительский процесс уничтожит лишние процессы. Поскольку это не установлено, я использую по умолчанию
  • MaxRequestWorkers = лимит обслуживаемых одновременных запросов