up
ГлавнаяБлогБезопасностьЖелезоПрограммированиеАдминистрирование
CentOSLinuxPHPPerlHDDBashCPUFreeBSDSSDDebianRAMHTMLMySQLBenchmark

Популярные статьи
Категория “Администрирование

Максимально число дочерних процессов

Часто задаются вопросом какое максимальное число дочерних процессов ставить, а еще чаще ставят ограничения, которых машина не в состоянии обработать. В Apache таким параметров является MaxClients, а в PHP-FPMpm.max_children. Советую никогда не устаналивать значения выше реально, требуемых. Ресурсы могут понадобится и для других задач. Но давайте же научимся хотя бы элементано определить максимально возможное значение параметра. Критериями выбора тут являются оперативная память и процессор.

Рассмотрим на примере потребление оперативной памяти.

Для этого нам нужно определить несколько параметров.

Общее потребление памяти процессами апача (Full Memory usage by Apache):

ps --no-headers -o "rss,cmd" -C apache2 | awk '{ sum+=$1 }; END {print sum/1024 " MB"}'

p.s.: для CentOS необходимо заменить apache2 на httpd.

Допустим мы получили значение 445.957 MB. Далее смотрим среднее потребление оперативной памяти уже одним процессом (Avg Memory per Apache Process):

ps --no-headers -o "rss,cmd" -C apache2 | awk '{ sum+=$1 }; END {print sum/1024/NR " MB"}'

Получаем значение 34.6878 MB. Далее нужно посмотреть сколько у нас вообще памяти в системе, или еще лучше - сколько свободной памяти. Вот тут многие сделают еще одну ошибку - будут смотреть колонку free вывода команды free -m. Почему это неварно и почему так нельзя делать описано в этой статье. Другие могут сделать другую ошибку - использовать данные Cached. Это хоть и файловый кэш, но не весь он может быть использован. Смотреть нужно на параметр Inactive. Варианты получения этого параметра Available Memory:

vmstat -s | grep inactive | awk '{print $1/1024 " MB"}'

awk '($1 == "Inactive:"){print $2/1024 " MB"}' /proc/meminfo

На некоторых системах может не быть утилиты vmstat. Это редко, но бывает. По этому лучше ориентироватся на вывод meminfo.

Получаем значение 2261.37 MB.

Нужно учесть что Apache уже работает и потребляет ресурсы оперативной памяти, по этому к свободной памяти следует прибавить используемое не текущий момент значение потребления ram апачем.

Full Available Memory = Available Memory + Full Memory usage by Apache = 2261.37 MB + 445.957 MB = 2 707.327 MB

Считаем максимальное количество дочерних процессов:

Max Child Processes = Full Available Memory / Avg Memory per Apache Process = 2 707.327 MB / 34.6878 MB = 78 процессов.

Это то количество процессов, при котором сервер будет работать еще корректно, без дополнительной дисковой нагрузки из-за swap. Естественно следует учесть, что при росте посещаемости сайта ростет потребление оперативной памяти не только апачем, но и другими процессами. То есть Full Available Memory необходимо разделить между всеми. Как правило самые "прожорливые" это Apache, MySQL, PHP, PHP-FPM.

Посчитаем аналогично для PHP-FPM на другом сервере:

Full Memory usage by PHP-FPM = 1858.14 MB

Avg Memory per PHP-FPM Process = 30.4613 MB

Available Memory = 2272.79 MB

Full Available Memory = 4 130.93 MB

Max Child Processes = 135 процессов

Аналогичный подсчет можно произвести и по использованию процесса.

Thursday, 25 June 2015, 10:45Прочитано 1 раз
Ссылка на страницу:

comments powered by Disqus

Чаще всего ищут

Статистика блога
Статтей: 177
Безопасность: 9
Железо: 19
Программирование: 14
Администрирование: 134