Оптимизировать производительность Apache

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

На сервере запущен 1 веб-сайт, представляющий собой платформу для заказа пиццы в режиме онлайн, основанную на Zend Framework (версия 1). По статистике трафика за последний месяц около 6.000 загрузок страниц в день, в основном вокруг обеда. Около 1500 пиков / час в этот период.

Недавно мы обновили линию ADSL 2/2 Мбит / с до 100/100 Мбит / с, и у нас все еще есть проблемы с производительностью во время обеда. Мы предположили, что проблема в 2mbit. Сайт довольно быстро работает в периоды низкой нагрузки.

аппаратные средства

CPU: Intel(R) Xeon(R) CPU            5160  @ 3.00GHz (3000.13-MHz K8-class CPU)

Mem: 328M Active, 4427M Inact, 891M Wired, 244M Cache, 623M Buf, 33M Free
Swap: 16G Total, 468K Used, 16G Free
(6GB physical, 16GB swap)

Filesystem   Type     Size    Used   Avail Capacity  Mounted on
/dev/ad7s1a  ufs      4.8G    768M    3.7G    17%    /
devfs        devfs    1.0K    1.0K      0B   100%    /dev
/dev/ad7s1g  ufs      176G    5.2G    157G     3%    /home
/dev/ad7s1e  ufs      4.8G    2.8M    4.5G     0%    /tmp
/dev/ad7s1f  ufs       19G    3.5G     14G    19%    /usr
/dev/ad7s1d  ufs      4.8G    550M    3.9G    12%    /var

Серверная ОС

FreeBSD 8.2-RELEASE

Программного обеспечения

apache-2.2.17
php5-5.3.8
mysql-server-5.5

След Apache (пример, взятый из # top)

31140 www              1  45    0   377M 41588K lockf   2   0:00  0.00% httpd
31122 www              1  44    0   375M 35416K lockf   2   0:00  0.00% httpd
31109 www              1  44    0   375M 38188K lockf   2   0:00  0.00% httpd
31113 www              1  44    0   375M 35188K lockf   2   0:00  0.00% httpd

Apache использует prefork MPM, APC (альтернативный кэш PHP). Модуль SSL загружен, но не используется (так как не работает, поэтому не используется). Есть файл, содержащий настройки для модулей MPM, но, как я вижу, он не включен в файл httpd.conf, строка включения закомментирована. Таким образом, я думаю, что prefork MPM тоже работает со значениями по умолчанию.

Вот некоторые другие значения Apache Conf, которые я нашел - которые включены в https.conf

Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

UseCanonicalName Off
HostnameLookups Off

Загрузка при возникновении проблем с производительностью

введите описание здесь

Примечание: API-запросы к бэкэнду

Что касается нашей онлайн-платформы, то она взаимодействует с нашей серверной системой через API (GET/POST). Для ценовых котировок на корзинах (кэшированных до добавления нового элемента), продуктов (кэшированных), цен на продукты (кэшированных). И на самом деле backend-сервер показывает реальную нагрузку, когда видит проблемы с производительностью в сети. Поэтому я стремлюсь к тому, чтобы запросы API выполнялись вечно, удерживая клиентов на веб-сервере. Таким образом, мой вопрос, является ли приведенная выше статистика (трафик / нагрузка) и текущая конфигурация программного обеспечения. По сравнению со спецификациями интернет-соединения и аппаратного обеспечения, это признаки загруженного сервера? И смогу ли я увеличить максимальное количество клиентов на веб-сервере, основываясь на доступных ресурсах и фактической площади Apache?

4 ответа

Эффективность веб-сайта является большой темой. Из того, что я вижу, проблема, скорее всего, не в Apache.

Есть несколько вещей, которые могут помочь вам улучшить вашу производительность.

  • Кэширование! Я не знаю, сколько вы кешируете в своем коде PHP. Но так как вы не используете SSL и, по-моему, у вас много данных только для чтения, попробуйте Varnish.

  • Включить mod_expires

  • Профилируйте свой сайт / бэкэнд API с помощью JMeter

Производительность Apache можно настроить с помощью настроек Worker MPM и Prefork. Изменение keepalive и максимальное количество резервных потоков может помочь повысить производительность и сократить потребление памяти. Оптимальные настройки для Prefork и worker можно найти здесь.

Нет, вышесказанное не является признаком напряженного сервера.

Хотя вы, возможно, испытываете насыщение сетевого ввода-вывода (поскольку вы не предоставляете фактические данные по нему), это крайне маловероятно, поскольку в пиковое время происходит так мало фактических запросов.

Вам нужно запустить несколько тестов на HTTP-сервере, чтобы увидеть, работает ли он на максимальной мощности. Если это так, то вам нужно исправить это.

Для дальнейшего использования вы должны настроить и использовать обработчик состояния сервера для мониторинга apache, как описано здесь: http://httpd.apache.org/docs/2.2/mod/mod_status.html

Возможно, у вас не хватает процессов (определяется MaxSpareServers а также StartServers). По умолчанию используется только 10, поэтому, если время вашего ответа велико, этого может быть недостаточно для одного запроса каждые 2 секунды (1500 / час).

Включите server-status модуль для мониторинга используемых процессов. Убедитесь, что вы установили правила доступа, чтобы они были доступны только внутри.

Другие вопросы по тегам