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 не допомагає.
  • Проблема здається частішою із "навантажених" сторінок (додаткові запити на IFRAMES тощо)

Я спробував багато змін httpd.conf(наприклад, відключення KeepAlive, EnableMMAP, HostnameLookups), але, здається, нічого не працює.


1
Коли ви отримаєте кілька голосів, ви отримаєте репутацію перенести відповідь у реальну відповідь, що вам слід зробити. (Якщо нічого іншого, то оновлення отримають вам більше репутації.)
pjmorse

1
Для пошуку цієї публікації тут через Google: Наведене нижче рішення також працює для цієї помилки: " (ОС 64) Вказане мережеве ім'я більше недоступне.: AH00341: winnt_accept: Асинхронний AcceptEx не вдався. " Німецькою мовою: " (OS 64) Виявлено Netzwerkname ist nicht mehr verfügbar.: AH00341: winnt_accept: Асинхронний AcceptEx не вдався. "
Уве Кейм

Відповіді:


35

Відповів Томас


Рішення полягає в тому, щоб додати httpd.conf:

AcceptFilter http none
AcceptFilter https none

У Windows це призводить до відключення API AcceptEx () (частина WinSock), який пропонує деякі покращення продуктивності, але, ймовірно, конфлікт із брандмауером Comodo.

Переведення брандмауера Comodo в режим "Інваліди" не допомагає, оскільки запити, ймовірно, все ще проходять через мережевий код 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. Є два значення, які використовують API Windows AcceptEx () і переробляють мережеві сокети між з'єднаннями. дані чекають, поки дані будуть передані, як задокументовано вище, і початковий буфер даних та адреси кінцевих точок мережі будуть отримані з одного виклику AcceptEx () Підключення використовуватиме API AcceptEx (), також отримує адреси кінцевих точок мережі, але як жоден варіант, з'єднання не чекає початкової передачі даних.

У Windows ніхто не використовує accept (), а не AcceptEx (), і не переробляє сокети між з'єднаннями. Це корисно для мережевих адаптерів із порушеною підтримкою драйверів, а також для деяких постачальників віртуальної мережі, таких як драйвери vpn або фільтри спаму, вірусів чи шпигунських програм.

Дивіться також: http://forums.comodo.com/help-for-comodo-antivirus/conflict-with-apache-t260.0.html;msg31636#msg31636


1
У мене виникли проблеми з IE10, що спричинило зависання Apache2.4 (без комодо), поки служба не буде перезапущена - і змінити .conf, щоб включити ці виправлені. Дякуємо, що опублікували це.
matt lohkamp

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.