Apache 2.4 su Windows risponde lentamente, si blocca durante la pubblicazione di alcune pagine dinamiche


30

(Conosco la risposta a questa domanda. Pubblicando questo solo per condividere la risposta con la comunità)

La mia istanza locale (Windows 7) di Apache 2.4 subisce ritardi o blocchi durante la pubblicazione di alcuni URL, a seconda del browser che utilizzo per accedere a questi URL .

Con Firefox / Chrome, Apache è lento nel rispondere a determinati URL. La lentezza si verifica circa il 20% delle volte su un determinato URL. Quando si verifica, si verifica un ritardo di 5 secondi durante il quale Firefox visualizza lo stato "In attesa di ...".

Con Internet Explorer 9, Apache semplicemente blocca e interrompe la ricezione di qualsiasi richiesta (con qualsiasi browser) fino al riavvio.

  • Ciò sembra verificarsi solo con richieste dinamiche (PHP), ma non tutte. In realtà, si verifica solo su un sito specifico. Altri siti basati su PHP sulla stessa macchina funzionano bene.
  • Può essere o meno significativo che il sito problematico sia costituito da un gran numero di sottodomini (VirtualHosts).
  • Disabilitare Windows Firewall e Comodo Firewall non aiuta.
  • Il problema sembra più frequente con le pagine "più occupate" (richieste aggiuntive per IFRAMES ecc.)

Ho provato molte modifiche a httpd.conf(come disabilitare KeepAlive, EnableMMAP, HostnameLookups) ma nulla sembra funzionare.


1
Dopo aver ottenuto alcuni voti positivi, avrai la reputazione di spostare la risposta in una risposta reale, cosa che dovresti fare allora. (Se non altro, i voti ti daranno più reputazione allora.)
pjmorse

1
Per trovare questo post qui tramite Google: La seguente soluzione funziona anche per questo errore: " (OS 64) Il nome di rete specificato non è più disponibile.: AH00341: winnt_accept: AcceptEx asincrono non riuscito. ". In tedesco: " (OS 64) Der angegebene Netzwerkname is nicht mehr verfügbar.: AH00341: winnt_accept: AcceptEx asincrono non riuscito. ".
Uwe Keim,

Risposte:


35

Risposta di Thomasz


La soluzione è aggiungere quanto segue al tuo httpd.conf:

AcceptFilter http none
AcceptFilter https none

Su Windows, ciò ha l'effetto di disabilitare l'API AcceptEx () (parte di WinSock), che offre alcuni miglioramenti delle prestazioni, ma probabilmente è in conflitto con Comodo Firewall.

Mettere Comodo Firewall in modalità "Disabilitato" non aiuta perché probabilmente le richieste passano ancora attraverso il codice di rete di Comodo. Penso che Comodo dovrebbe essere disinstallato completamente per eliminare il problema (anche se non l'ho provato).

Se hai un problema simile con Apache 2.2, dovresti invece usare la direttiva Win32DisableAcceptEx.

Riferimenti

Citando da http://httpd.apache.org/docs/2.4/mod/core.html :

I valori predefiniti su Windows sono:

AcceptFilter http data

AcceptFilter https data

Window mpm_winnt interpreta AcceptFilter per attivare l'API AcceptEx () e non supporta il buffering del protocollo http. Esistono due valori che utilizzano l'API AcceptEx () di Windows e riciclano i socket di rete tra le connessioni. i dati attendono fino a quando i dati non sono stati trasmessi come documentato sopra e il buffer dati iniziale e gli indirizzi dell'endpoint di rete sono tutti recuperati dalla singola chiamata di AcceptEx (). connect utilizzerà l'API AcceptEx (), recupererà anche gli indirizzi degli endpoint di rete, ma come nessuno l'opzione connect non attende la trasmissione iniziale dei dati.

Su Windows, nessuno usa accept () anziché AcceptEx () e non ricicla i socket tra le connessioni. Ciò è utile per le schede di rete con supporto driver non funzionante, nonché per alcuni provider di rete virtuale come driver vpn o filtri antispam, virus o spyware.

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


1
Ho avuto problemi con IE10 che ha causato il blocco di Apache2.4 (nessun comodo coinvolto) fino al riavvio del servizio - e la modifica di .conf per includerli ha risolto il problema. Grazie per aver pubblicato questo
Matt Lohkamp,

1
Questo ha funzionato anche per me. Ho anche raccolto alcuni altri riferimenti sul mio blog poiché le informazioni su questo argomento sono molto sparse al momento.
Stijn de Witt,

3
Ha funzionato per me, Win 7 x64. Mi chiedo perché nonenon sia l'impostazione predefinita in Apache? La maggior parte delle altre funzionalità "innovative" sono disabilitate per impostazione predefinita in Apache: P
rustyx,

-1

Sto eseguendo Apache 2.4.16 su una scatola di Windows 7 Pro e il mio sito Web ha smesso di funzionare circa 2 settimane fa. L'aggiunta di questo ha risolto il problema.

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

Down ha votato perché la tua risposta è esattamente la stessa sopra di @Eric Fossum.
Hargobind,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.