Я использую команды netstat, чтобы правильно оптимизировать мой httpd.conf.
Вот результаты:
netstat -an | grep -c :80
579
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
134 207.x.xx.134 //This was the highest result. Also this is my servers IP address
Я в курсе что мой собственный IP-адрес возвращает 134 соединения httpd. Я просмотрел все сценарии веб-сайта и удалил все ссылки css, js, php, которые начинаются с «http: //» - но у меня все еще есть такое большое количество подключений!
Я также нашел эту команду на форуме, но понятия не имею, что она отображает:
ps auxww | grep httpd | wc -l
37
А вот и мой httpd.conf:
Timeout 30
TraceEnable Off
ServerSignature Off
ServerTokens ProductOnly
FileETag None
StartServers 2
<IfModule prefork.c>
MinSpareServers 2
MaxSpareServers 4
</IfModule>
ServerLimit 250
MaxClients 800
MaxRequestsPerChild 50
KeepAlive On
KeepAliveTimeout 1
MaxKeepAliveRequests 10
Что я могу изменить, чтобы максимизировать свой гибридный сервер? (Работает Intel (R) Xeon (R) CPU E5620 @ 2,40 ГГц - 2 ГБ оперативной памяти - MYSQL тяжелый).
Спасибо.
Несколько комментариев, но обратите внимание, что большая часть этого является обоснованным предположением с учетом небольшого количества информации. Не стесняйтесь пробовать разные вещи и игнорировать их, если они вам не подходят:
MaxRequestsPerChild
очень низкий. Если у вас нет особой причины для этого значения, установите для него достаточно высокое значение (1000, 10000 и т. Д.) Или 0, чтобы полностью отключить его.KeepAliveTimeout
1 является разумным, хотя его немного выше (2-5) или отключение KeepAlive может работать лучше в зависимости от вашего приложения.MaxClients
800 и ServerLimit
250 - это слишком много для сервера на 2 ГБ, не говоря уже о том, на котором запущен MySQL, голодный по оперативной памяти. Например, если вы хотите выделить Apache около 1 ГБ, более разумным значением для этих параметров будет 40–80. Точное значение будет зависеть от того, сколько памяти занимает каждый экземпляр Apache. Опасность того, что эти значения будут очень высокими, заключается в том, что при высоких нагрузках машина начнет использовать память подкачки, что снизит производительность вашего сервера почти до нуля. ps auxww | grep httpd | wc -l
строка просто подсчитывает, сколько дочерних процессов Apache запущено (в данном случае 37). В mod_status extension - это более мощный / полезный инструмент для определения того, сколько дочерних процессов запущено и что они делают.netstat
вы можете включить grep ESTABLISHED
pipe, чтобы отобразить только текущие установленные соединения, иначе вы включите большое количество старых соединений TIME_WAIT. Например, на одном из моих серверов в настоящее время указано 1300 подключений, из которых только 3 фактически в настоящее время активны. netstat -anp |grep 'tcp\|udp' | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
ваша команда неверна - netstat -anp - веб-сервер вообще не использует udp, только tcp. для лучшего теста я бы выбрал несколько URL-адресов, которые попадают в базу данных и / или, возможно, протестировал полный поток и проверил его с помощью ab
ab ... # http://httpd.apache.org/docs/2.0/programs/ab.html