Из 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 в том же файле журнала, но это становится намного сложнее.