Оптимизировать производительность 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
модуль для мониторинга используемых процессов. Убедитесь, что вы установили правила доступа, чтобы они были доступны только внутри.