RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


Stylesheet conf/userstyle.css not found, please contact the developer of "dokuwiki_2024" template.
linux:apache:apache_oom

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

linux:apache:apache_oom [2019/01/22 16:39] – создано - внешнее изменение 127.0.0.1linux:apache:apache_oom [2023/11/03 19:07] (текущий) dx
Строка 1: Строка 1:
 +====== Ошибка httpd prefork invoked oom killer или почему падает Apache? ======
  
 +Ссылки по теме настроек Apache
 +
 +  * [[https://www.thomas-krenn.com/en/wiki/Apache_Performance_Tuning|Apache Performance Tuning]]
 +  * [[http://sc0rp1us.blogspot.ru/2012/09/apache-preforkc-lamp-centosrhel.html|Рассчитываем параметры prefork.c для Apache в Linux]]
 +  * [[http://www.woktron.com/secure/knowledgebase/133/How-to-optimize-Apache-performance.html|How to optimize Apache performance]]
 +  * http://www.o-nix.com/pages/reshenija-dlja-xostinga/apache-mpm.php
 +
 +<callout type="info">Также в wiki есть отдельная статья про [[linux:oom|OOM]].</callout>
 +
 +TL;DR не использовать дефолтные настройки Apache (MaxClients 256 на сервере с 1 ГБ RAM прямой путь к OOM). Совет [[linux:nginx:apache_vs_nginx|не использовать Apache и перейти на nginx]] не будем рассматривать, потому-что нельзя ездить на Камаро в поле и на Белазе по автобану.
 +
 +Итак, начинаем с подсчёта потребления памяти одним процессом Apache. В этом нам поможет [[linux:bash:ps_mem|скрипт ps_mem]]
 +
 +<code>
 +# ps_mem 
 + Private  +   Shared  =  RAM used       Program 
 +  2.0 MiB +  97.0 KiB =   2.1 MiB       proftpd
 + 14.5 MiB +   6.7 MiB =  21.2 MiB       nginx (5)
 +  7.2 MiB +  26.4 MiB =  33.6 MiB       httpd (44)
 +327.9 MiB + 271.5 KiB = 328.2 MiB       mysqld
 +---------------------------------
 +                        577.0 MiB
 +=================================
 +</code>
 +
 +Не забываем, о том [[linux:linux_ate_my_ram|как Linux считает память]]
 +
 +У нас 44 процесса Apache, общее потребление памяти 328 МБ, а один процесс занимает 26 МБ ([[linux:apc|без опкэша]] было бы сильно больше). На сервере доступно 4 ГБ памяти. Скрипт mysqltuner.pl уверенно сообщает, что максимальное количество памяти, которое он может использовать 1 ГБ.
 +
 +Округлим 26 МБ до 32 для удобства восприятия. В итоге формула получается такая: Объём RAM минус резерв для MySQL минус резерв для других процессов и всё это делим на память одного процесса Apache.
 +
 +То есть: (4096 - 1024 - 512) / 32 = 80
 +
 +MaxClients и ServerLimit можем поставить равным 80. Естественно эта формула очень условная и надо учитывать особенности конкретной системы.
 +
 +Есть также замечательные скрипты, которые сразу подскажут какие значения лучше поставить - [[http://apachebuddy.pl|apachebuddy.pl]] и <del>[[http://apache2buddy.pl|apache2buddy.pl]]</del>, [[https://github.com/richardforth/apache2buddy|apache2buddy]].
 +
 +Первый скрипт работает с Apache 2.2. Второй для Apache 2.4
 +
 +**Важное замечание** по опции [[http://web.archive.org/web/20160426073610/http://modperlbook.org/html/11-2-Setting-the-MaxRequestsPerChild-Directive.html|MaxRequestsPerChild]]
 +
 +//Setting MaxRequestsPerChild to a non-zero limit solves some memory-leakage problems caused by sloppy programming practices and bugs, whereby a child process consumes a little more memory after each request. In such cases, and where the directive is left unbounded, after a certain number of requests the children will use up all the available memory and the server will die from memory starvation.//
 +
 +И еще [[https://www.wpjeos.no/apache-mpm-prefork/|интересная теория]] насчёт значений для других опций
 +
 +  * StartServers: 30% of MaxClients
 +  * MinSpareServers: 5% of MaxClients
 +  * MaxSpareServers: 10% of MaxClients
 +  * MaxRequestWorkers = MaxClients
 +  * MaxConnectionsPerChild= 10000 (To avoid problem with memory leaks in WordPress plugin themes and apps)
 +
 +При существенной нагрузке в ''/var/log/httpd/error_log'' можно увидеть ошибку **server reached MaxClients setting, consider raising the MaxClients setting**. Как нетрудно догадаться в этом случае нужно увеличить значение для ''MaxClients'' если есть достаточно RAM.
 +
 +Еще важный момент. В CentOS 6 настройки находятся в ''/etc/httpd/conf/httpd.conf'', в Debian/Ubuntu в файле ''/etc/apache2/conf/apache2.conf'', а вот в CentOS 7 нужно редактировать файл ''/etc/httpd/conf.d/mpm_prefork.conf''.
 +
 +И последнее замечание - если вы поменяли ''MaxClients'', а настройки не вступили в силу, то значит опция определена где-то ещё. Найти такие файлы можно командой
 +
 +<code># find /etc -type f -exec grep -l 'MaxClients' {} \;</code>
 +
 +или
 +
 +<code># grep -iRl "MaxClients" /etc/</code>
 +
 +Впрочем, это уже [[https://memepedia.ru/vprochem-eto-uzhe-sovsem-drugaya-istoriya/|совсем другая история]].
 +
 +EOM
 +
 +{{tag>apache howto httpd oom}}