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

Как ускорить работу сервера с помощью netstat и httpd.conf?

Я использую команды 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 - это более мощный / полезный инструмент для определения того, сколько дочерних процессов запущено и что они делают.
  • Я предполагаю, что у вас 134 соединения с вашего собственного IP-адреса из-за соединений MySQL, хотя в зависимости от того, что вы используете, могут быть и другие источники. Удаление ссылок с «http» в них не имеет смысла и не должно влиять на это число (если у вас нет определенных настроек прокси Apache для этого контента).
  • Когда используешь 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