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

26189
Tomasz P. Szynalski

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

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

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

2 ответа на вопрос

32
Eric Fossum

Answered by Thomasz


The solution is to add the following to your httpd.conf:

AcceptFilter http none AcceptFilter https none 

On Windows, this has the effect of disabling the AcceptEx() API (part of WinSock), which offers some performance improvements, but probably conflicts with Comodo Firewall.

Putting Comodo Firewall in "Disabled" mode doesn't help because requests probably still go through Comodo's networking code. I think Comodo would have to be uninstalled completely to eliminate the problem (though I haven't tried it).

If you have a similar problem with Apache 2.2, you should use the Win32DisableAcceptEx directive instead.

References

Quoting from http://httpd.apache.org/docs/2.4/mod/core.html:

The default values on Windows are:

AcceptFilter http data

AcceptFilter https data

Window's mpm_winnt interprets the AcceptFilter to toggle the AcceptEx() API, and does not support http protocol buffering. There are two values which utilize the Windows AcceptEx() API and will recycle network sockets between connections. data waits until data has been transmitted as documented above, and the initial data buffer and network endpoint addresses are all retrieved from the single AcceptEx() invocation. connect will use the AcceptEx() API, also retrieve the network endpoint addresses, but like none the connect option does not wait for the initial data transmission.

On Windows, none uses accept() rather than AcceptEx() and will not recycle sockets between connections. This is useful for network adapters with broken driver support, as well as some virtual network providers such as vpn drivers, or spam, virus or spyware filters.

See also: http://forums.comodo.com/help-for-comodo-antivirus/conflict-with-apache-t260.0.html;msg31636#msg31636

У меня были проблемы с IE10, из-за которых Apache2.4 (без участия comodo) зависал до тех пор, пока служба не была перезапущена - и изменил .conf, чтобы включить эти исправления. Спасибо за публикацию этого. matt lohkamp 10 лет назад 1
Это сработало и для меня. Я также собрал еще несколько ссылок на [мой блог] (http://stijndewitt.wordpress.com/2014/01/10/apache-hangs-ie11/), так как информация по этой теме в настоящее время очень разбросана. Stijn de Witt 10 лет назад 1
У меня сработало Win 7 x64. Интересно, почему `none` не является настройкой по умолчанию в Apache? Большинство других «инновационных» функций по умолчанию отключены в Apache: P rustyx 9 лет назад 3
Спасатель жизни. Спасибо! Benjamin 8 лет назад 1
-1
pluckyduck

Я использую 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 7 лет назад 0