Как ускорить Apache
У нас есть сервер с 8 ядрами, 16 ГБ оперативной памяти и дисками RAID 0 SAS 10K. Наша цель - использовать это для быстрого обслуживания довольно простого php-приложения. Мы протестировали все остальные компоненты и считаем, что сузили их до apache - нашего узкого места.
Я не гуру Apache. Я провел некоторые исследования и проверил несколько вещей, но когда я тестирую с JMeter, запускающим 100 одновременных подключений к серверу, первые 10 - 20 возвращаются быстро 30 - 100 мс, а остальные занимают от 1000 мс до 3000 мс. У любого есть идеи о том, что нужно изменить в нашей конфигурации apache, чтобы сделать это быстрее, сейчас это просто установка apache.
3 ответа
Вы абсолютно уверены, что Apache является для вас настоящим узким местом? Вы ничего не рассказали о своем "довольно простом PHP-приложении", но для меня это звучит так, как будто он использует какую-то базу данных, и это начинает довольно быстро тормозить во время вашего теста.
Традиционными значениями Apache, которые вы должны учитывать при настройке, являются MaxClients, ServerLimit, MinSpareServers, MaxSpareServers и TimeOut. Но большую часть времени настройка этих значений наиболее полезна для статического содержимого; PHP и другие динамические вещи более непредсказуемы с точки зрения Apache. Если скрипт PHP запускается за пять секунд и потребляет 100% ресурсов процессора, то для его запуска требуется пять секунд и он потребляет 100% ресурсов процессора, и никакие настройки Apache не помогут.
Какой дистрибутив Linux вы используете?
С таким мощным сервером, как у вас, Apache должен легко обслуживать тысячи и тысячи HTTP-запросов в секунду со статическим содержимым; с PHP число может быть намного меньше.
Сначала мы должны попытаться определить, в чем проблема. Вы сказали, что хотите использовать этот сервер для обслуживания "довольно простого php-приложения"!?
Что вы делаете по довольно простой, вы используете какую-либо базу данных? Если да, вам следует проверить, оптимизированы ли ваши запросы (например, в mysql вы можете включить регистратор slow_query, посмотрите эту страницу: http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html)
Вы также можете проверить, сколько времени ваш php-интерпретатор тратит на создание вашей веб-страницы (в зависимости от того, что делают ваши php-скрипты). Хорошей идеей для улучшения среднего времени "исполнения" php-скрипта без особых усилий является использование apc. ( введите описание ссылки здесь), проверьте, установлен ли он вашим менеджером пакетов (если вы его используете).
А как насчет вашего теста, вы делали их на статическом контенте или на своих php страницах? Не могли бы вы дать больше информации о вашей архитектуре?! Существует множество способов улучшить приложения php/apache, но нам нужно больше информации:-) о вашем случае
Установите кеширующий обратный прокси-сервер между веб-сервером и пользователями, это имеет дополнительное преимущество, заключающееся в улучшении безопасности (при условии правильной настройки)
Кальмар
Очень хорошо, но немного трудно понять, но если вы хотите доить каждую мс времени, то затраты времени того стоят