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

MaxClients в apache. Как узнать размер моего процесса?

Из http://httpd.apache.org/docs/2.2/misc/perf-tuning.html

Самая большая проблема с оборудованием, влияющая на производительность веб-сервера, - это оперативная память. Веб-серверу никогда не нужно менять местами, так как свопинг увеличивает задержку каждого запроса сверх точки, которую пользователи считают «достаточно быстрой». Это заставляет пользователей нажимать кнопку остановки и перезагружать, что еще больше увеличивает нагрузку. Вы можете и должны контролировать настройку MaxClients, чтобы ваш сервер не порождал столько дочерних элементов, что он начал заменять их местами. Эта процедура проста: определите размер вашего среднего процесса Apache, просмотрев список процессов с помощью такого инструмента, как top, и разделите его на общую доступную память, оставив место для других процессов.

Основная проблема в том, что я не могу понять, как узнать размер, потому что, ну, у меня размер httpd не более 3888

Но если нам нужно определить число для MaxClients, а у меня 4 ГБ ОЗУ, я получаю: 972, значит, я должен использовать 900 в MaxClients?

Сначала определите PID одного из ваших процессов Apache.

Тогда вы можете сделать что-то вроде этого:

cat /proc/PIDHERE/status | grep VmRSS

Это даст (текущий) размер резидентного набора этого конкретного процесса, аналогично:

VmRSS: 304456 kB

Это значение, как кажется, это размер резидентного процесса в ОЗУ.

Затем нормализуйте вашу единицу измерения (4GB * 1024 * 1024 = 4,194,304 KB). Делить:

4194304 KB / 304456 KB = 13.77 processes

Учтите, что у вас, вероятно, есть другие процессы, запущенные в вашей системе, которые также будут потреблять память, и в идеале вы хотите минимизировать подкачку, поэтому вы вряд ли захотите настроить 13 Apache MaxClients (с использованием моих чисел), вам нужно немного меньше (на ваше усмотрение ).

Это грубая оценка; размер ваших процессов Apache может со временем расти в зависимости от нагрузки.

Прогнозирование maxClients из тестовых сценариев - это отправная точка, но для правильного решения проблемы вам нужно начать измерять, как ваше приложение ведет себя с реальным трафиком.

Предполагая, что ваш apache запускает предварительную вилку ....

Настройте задание cron для подсчета количества процессов httpd и вывода «бесплатно». Обратите внимание, что если ваш веб-сервер обслуживает любой контент из локальных файлов (а во многих случаях даже если это не так), объем памяти, доступный для кеша / буферов, будет иметь большое влияние на производительность. то есть если вы дойдете до места подкачки, ваша веб-производительность, вероятно, будет ужасной!

Получив некоторые данные, нанесите их на диаграмму и выполните регрессию по методу наименьших квадратов - экстраполируйте, чтобы найти количество клиентов, на которых вы достигнете целевого предела использования памяти httpd. Отправной точкой для целевого значения памяти будет меньшее из 80% физической памяти / 80% размера содержимого.

(обратите внимание, если для MinSpareServers установлено очень высокое значение, результаты могут быть неточными)

#!/bin/bash

LOGFILE='/var/log/httpd/memusage'
PIDS = `ps -ef | grep httpd | grep -v grep | wc -l`
MEM = `free | grep 'buffers/cache'`
DAY = `date '%Y-%m-%d %H:%M:%S'`
echo ${DAY} ${PIDS} ${MEM} >>LOGFILE

В идеале вы также должны измерить время ответа URL в том же файле журнала, но это становится намного сложнее.