Apache 2.4 на Windows реагирует медленно, зависает при обслуживании некоторых динамических страниц


30

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

Мой локальный (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), но, похоже, ничего не работает.


1
Как только вы наберете несколько голосов «за», у вас будет репутация перевести ответ в реальный ответ, что вы должны сделать потом. (Если ничто иное, откаты не принесут вам больше репутации.)
pjmorse

1
Чтобы найти эту публикацию здесь через Google: приведенное ниже решение также работает для этой ошибки: " (OS 64) Указанное сетевое имя больше не доступно.: AH00341: winnt_accept: асинхронный сбой AcceptEx. ". На немецком языке: « (OS 64) Der angegebene Netzwerkname ist nicht mehr verfügbar.: AH00341: winnt_accept: Асинхронный сбой AcceptEx. ».
Уве Кейм

Ответы:


35

Ответ Томаса


Решение состоит в том, чтобы добавить следующее к вашему 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 в Windows интерпретирует 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
У меня были проблемы с IE10, из-за которых Apache2.4 (без участия comodo) зависал до тех пор, пока служба не была перезапущена - и изменил .conf, чтобы включить эти исправления. Спасибо за публикацию этого.
Мэтт Лохкамп

1
Это сработало и для меня. Я также собрал еще несколько ссылок в своем блоге, так как информация по этой теме в настоящее время очень разбросана.
Стейн де Витт

3
У меня сработало Win 7 x64. Интересно, почему noneв Apache нет настроек по умолчанию? Большинство других «инновационных» функций по умолчанию отключены в Apache: P
rustyx

-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

Голосовали против, потому что ваш ответ точно такой же, как и выше @Eric Fossum.
Hargobind
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.