27

(Я знаю ответ на этот вопрос. Выкладываю это просто чтобы поделиться ответом с сообществом)

Мой локальный (Windows 7) экземпляр Apache 2.4 испытывает задержки или зависания при обслуживании некоторых URL-адресов, в зависимости от того, какой браузер я использую для доступа к этим URL-адресам.

С Firefox/Chrome Apache медленно отвечает на определенные URL-адреса. Вялость происходит около 20% времени на любом данном URL. Когда это происходит, возникает 5-секундная задержка, в течение которой Firefox отображает статус «Ожидание ...».

В Internet Explorer 9 Apache просто зависает и перестает обслуживать любые запросы (в любом браузере) до тех пор, пока он не будет перезапущен.

  • Похоже, что это происходит только с динамическими (PHP) запросами, но не со всеми. На самом деле, это происходит только на одном конкретном сайте. Другие PHP-сайты на той же машине работают нормально.
  • Может быть или не быть значительным, что проблемный сайт состоит из большого количества поддоменов (VirtualHosts).
  • Отключение брандмауэра Windows и Comodo Firewall не помогает.
  • Проблема чаще возникает с более загруженными страницами (дополнительные запросы на IFRAMES и т.д.)

Я пробовал много изменений в httpd.conf (например, отключение KeepAlive, EnableMMAP, HostnameLookups), но, похоже, ничего не работает.

2 ответа2

32

Ответ Томаса


Решение состоит в том, чтобы добавить следующее в ваш httpd.conf:

AcceptFilter http none
AcceptFilter https none

В Windows это приводит к отключению API AcceptEx() (часть WinSock), которое предлагает некоторые улучшения производительности, но, вероятно, конфликтует с Comodo Firewall.

Перевод Comodo Firewall в режим "Отключено" не помогает, потому что запросы, вероятно, все еще проходят через сетевой код Comodo. Я думаю, что Comodo придется полностью удалить, чтобы устранить проблему (хотя я не пробовал).

Если у вас есть похожая проблема с Apache 2.2, вы должны вместо этого использовать директиву Win32DisableAcceptEx.

Рекомендации

Цитата из http://httpd.apache.org/docs/2.4/mod/core.html:

Значения по умолчанию в Windows:

AcceptFilter http data

AcceptFilter https data

Mpm_winnt в Window интерпретирует AcceptFilter для переключения API AcceptEx() и не поддерживает буферизацию протокола http. Есть два значения, которые используют Windows AcceptEx() API и перезапускают сетевые сокеты между соединениями. данные ожидают, пока данные не будут переданы, как описано выше, и начальный адрес буфера данных и адреса конечных точек сети будут получены из одного вызова AcceptEx(). connect будет использовать API AcceptEx(), также получит адреса конечных точек сети, но, как ни один, опция connect не ожидает начальной передачи данных.

В Windows никто не использует accept(), а не AcceptEx() и не перезапускает сокеты между соединениями. Это полезно для сетевых адаптеров с поддержкой поврежденных драйверов, а также для некоторых поставщиков виртуальных сетей, таких как драйверы vpn или фильтры нежелательной почты, вирусов или программ-шпионов.

Смотрите также:http://forums.comodo.com/help-for-comodo-antivirus/conflict-with-apache-t260.0.html;msg31636#msg31636

-1

Я использую Apache 2.4.16 на Windows 7 Pro, и мой сайт просто перестал работать около 2 недель назад. Добавление этого решило проблему.

ServerRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.4"

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to 
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen XX.XX.XX.XX:80
Listen 80
AcceptFilter http none
AcceptFilter https none

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .