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

Базовая настройка сервера Apache httpd становится медленной для обслуживания изображений, требующих частой перезагрузки

У меня есть httpd-сервер Apache, работающий на RHEL 5.3. Я использую этот сервер для обслуживания статического контента (изображений) для веб-сайта, работающего на другом экземпляре httpd. В общедоступном веб-каталоге есть несколько изображений, и все. Через некоторое время после запуска сервер начинает очень медленно передавать изображения в браузер и часто может зависать на несколько минут, пытаясь обслужить png 16x16.

Как лучше всего решить эту проблему?

Я бегал верхняя на коробке, чтобы проверить, достаточно ли свободной памяти и ЦП. Машина не переходит в свопинг, а процесс httpd занимает центральный процессор и память только на пару секунд, когда изображение запрашивается через браузер. Однако изображение часто возвращается только через несколько минут.

Перезапуск процесса httpd решает проблему, и изображения загружаются быстро.

Это похоже на простейшую возможную настройку веб-сервера. В чем может быть проблема?

Спасибо

ОБНОВИТЬ: настройки httpd.conf:

Timeout 10
KeepAlive On
MaxKeepAliveRequests 150
KeepAliveTimeout 15
ServerLimit 3

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

Использовать mod_status для проверки и мониторинга состояния сервера. Думаю, большинство подключений ждут в статусе KeepAlive. Вы можете попробовать выключить его или уменьшить значение, например KeepAliveTimeout 4.

Предложения по диагностике:

  1. Вы проверили процессор и память, но было бы неплохо также посмотреть пропускную способность диска и другую статистику (я предлагаю dstat -af). Вам нужны такие вещи, как большое количество операций чтения или записи на диск, множество переключений контекста или прерываний, другие измерения, которые сильно различаются между запуском сервера и его поведением в случае возникновения проблем.

  2. Еще одна вещь, которую нужно проверить, - это выяснить, является ли поведение функцией прохождения времени, или количества запросов, или того и другого?

    • Запустите сервер, не запрашивайте изображения в течение нескольких часов, а затем запрашивайте изображение, быстрый запрос или?
    • Запустите сервер, запросите изображения как можно быстрее (используйте обратную петлю, чтобы избежать задержки в сети) и посмотрите, сколько времени потребуется, чтобы достичь определенного заранее определенного уровня медленности (например, 10-секундного ответа)
  3. Проверьте, не связана ли это с сетью. Когда у сервера возникают проблемы (например, 10-секундные ответы), запросите изображение через интерфейс обратной связи. Если быстро вернется, посмотрите на сеть. Если он медленный, вы, вероятно, можете игнорировать сетевые проблемы за пределами вашего хоста.

Пара вопросов:

Вы настраивали файл Apache.conf? Какой Apache MPM вы используете?
Какие параметры в настоящее время установлены в файле Apache.conf для:

Timeout
KeepAlive
MaxKeepAliveRequests
KeepAliveTimeout
MinSpareServers
MaxSpareServers
StartServers
MaxClients
MaxRequestsPerChild