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

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

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

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

Недавно мы перешли с 2/2mbit aDSL-линии на 100/100mbit волокно, и у нас все еще есть проблемы с производительностью во время ужина. Мы предположили, что проблема в 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 (Alternative PHP Cache). Модуль SSL загружен, но не используется (то есть не работает, поэтому не используется). Есть файл с настройками для модулей MPM, но, как я вижу, он не включен в файл httpd.conf, строка include закомментирована. Таким образом, я предполагаю, что prefork MPM также работает со значениями по умолчанию.

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

Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

UseCanonicalName Off
HostnameLookups Off

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

введите описание изображения здесь

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

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

решение1

Производительность веб-сайта — это большая тема. Насколько я вижу, проблема, скорее всего, не в Apache.

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

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

  • Давать возможностьmod_expires

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

решение2

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

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

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

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

решение3

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

решение4

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

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

Связанный контент