понедельник, 23 июня 2014 г.

Оптимизация Apache2

Вторая заметка из цикла оптимизации веб-сервера на базе apache+nginx+mysql+php.

В интернете полно статей на эту тему, поэтому находил информацию с разных источников и соединял это воедино.

Уточню, что все нижеуказанные параметры, подходящие для моего сервера, могут не подойти для использования другого, так как они являются сугубо индивидуальными и подобраны в соответствии с характеристиками сервера.

На сервере установлен восьмиядерный процессор Xeon и 24Гб оперативной памяти, на котором работает более 200 сайтов, в основном на Joomla и WordPress.


Проверим, какой MPM (Multi-processing module) использует Apache:
# apache2 -V | grep "Server MPM"
Server MPM:     Prefork

Перед изменением конфигов, нужно сделать резервную копию:
# cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak

Скроем версию apache2 для безопасности (это не относится к оптимизации):
# vim /etc/apache2/apache2.conf
ServerSignature Off
ServerTokens Prod

Настраивам apache2 для использования MPM Prefork:
# vim /etc/apache2/apache2.conf
<IfModule mpm_prefork_module>
   # Число процессов, запускаемых вначале
   StartServers          5
   # Мин. и макс. число ожидаемых процессов
   MinSpareServers       5
   MaxSpareServers       10
   # Максимальное число параллельных запросов
   MaxClients            150
   # Число запросов, обрабатываемых за дочерний процесс/поток
   MaxRequestsPerChild   3000
</IfModule>

# Несколько запросов в одном TCP-подключении
KeepAlive On
# Время до нового запроса
KeepAliveTimeout 5
# Отключение reverse DNS запросов
HostnameLookups Off

Отключаем ненужные модули status (статистика apache2), deflate (сжатие, так как помимо apache2, на сервере ещё и nginx, то необходимости в сжатии нет):
# a2dismod status
# a2dismod deflate

# apachectl restart

Расчёт значения MaxClients.

Обычно для динамики процесс занимает примерно 16-32 Мб памяти.
Предположим, что для апача нам не жалко 5 Гб памяти.
5 Гб / ~30 Мб ~= 150 MaxClients

Примерный размер процесса apache2, можно проверить так (смотреть в колонку RSS): 
# ps -ylC apache2 --sort:rss
S UID  PID   PPID  C  PRI NI RSS   SZ   WCHAN TTY TIME    CMD
...
S  33  6521  2843  0  80   0 17208 157411 -   ?  00:00:00 apache2
S  33  5385  2843  0  80   0 17212 157409 -   ?  00:00:00 apache2
S  33  6132  2843  0  80   0 17216 157411 -   ?  00:00:00 apache2
S  33  4684  2843  0  80   0 17244 157413 -   ?  00:00:00 apache2
S   0  2843     1  0  80   0 29508 157281 -   ?  00:00:00 apache2

Полезные сслыки:
Оптимизация производительности Apache: opennet.ru/base/net/apache_tune.txt.html
Оптимизация Apache на Debian: aposnov.ru/оптимизация-apach
Настройка систем LAMP, Часть 2: Оптимизация Apache и PHP: ibm.com/developerworks/ru/library/l-tune-lamp-2/l-tune-lamp-2.html
Тюнинг сервера Apache: ruhighload.com/index.php/2009/05/27/оптимизация-производительности-apache/

Комментариев нет: