동적 페이지를 제공 할 때 Windows의 Apache 2.4가 느리게 응답하고 정지됨 / Chrome을 사용하면 Apache가 특정 URL에서

(이 질문에 대한 답변을 알고 있습니다. 커뮤니티에 답변을 공유하기 위해 게시하면됩니다)

Apache 2.4의 로컬 (Windows 7) 인스턴스는 이러한 URL에 액세스하는 데 사용하는 브라우저에 따라 일부 URL을 제공 할 때 지연 또는 중단을 경험 합니다 .

Firefox / Chrome을 사용하면 Apache가 특정 URL에서 느리게 응답 합니다. 주어진 URL에서 약 20 %의 느리게 발생합니다. 이 문제가 발생하면 Firefox가 “Waiting for …”상태를 표시하는 5 초 지연이 발생합니다.

Internet Explorer 9에서는 Apache 가 다시 시작될 때까지 중단되어 모든 브라우저에서 모든 요청을 처리하는 것이 중지 됩니다.

  • 이는 동적 (PHP) 요청에서만 발생하는 것으로 보이지만 전부는 아닙니다. 실제로는 하나의 특정 사이트에서만 발생합니다. 동일한 컴퓨터의 다른 PHP 기반 사이트는 정상적으로 작동합니다.
  • 문제가있는 사이트가 많은 수의 하위 도메인 (VirtualHosts)으로 구성되어있는 것이 중요하거나 중요하지 않을 수 있습니다.
  • Windows 방화벽 및 Comodo Firewall을 비활성화해도 도움이되지 않습니다.
  • 이 문제는 “더 번잡 한”페이지 (IFRAMES에 대한 추가 요청 등)에서 더 자주 보입니다.

httpd.confKeepAlive, EnableMMAP, HostnameLookups 비활성화와 같은 많은 변경을 시도 했지만 아무것도 작동하지 않는 것 같습니다.



답변

의해 답변을 Thomasz


해결책은 다음을 추가하는 것입니다 httpd.conf.

AcceptFilter http none
AcceptFilter https none

Windows에서는 성능이 약간 향상되지만 Comodo Firewall과 충돌하는 AcceptEx () API (WinSock의 일부)를 비활성화하는 효과가 있습니다.

요청이 여전히 Comodo의 네트워킹 코드를 통과하기 때문에 Comodo Firewall을 “Disabled”모드로 설정해도 도움이되지 않습니다. 문제를 제거하려면 Comodo를 완전히 제거해야한다고 생각합니다 (시도하지는 않았지만).

Apache 2.2에서 비슷한 문제가 발생하면 대신 Win32DisableAcceptEx 지시문을 사용해야합니다.

참고 문헌

http://httpd.apache.org/docs/2.4/mod/core.html 에서 인용 :

Windows의 기본값은 다음과 같습니다.

AcceptFilter http data

AcceptFilter https data

Window의 mpm_winnt는 AcceptEx () API를 토글하기 위해 AcceptFilter를 해석하고 http 프로토콜 버퍼링을 지원하지 않습니다. Windows AcceptEx () API를 사용하는 두 개의 값이 있으며 연결간에 네트워크 소켓을 재활용합니다. 데이터는 위에서 설명한대로 데이터가 전송 될 때까지 대기하며 초기 데이터 버퍼 및 네트워크 엔드 포인트 주소는 모두 단일 AcceptEx () 호출에서 검색됩니다. connect는 AcceptEx () API를 사용하고 네트워크 엔드 포인트 주소도 검색하지만 connect 옵션은 초기 데이터 전송을 기다리지 않습니다.

Windows에서는 AcceptEx () 대신 accept ()를 사용하지 않으며 연결간에 소켓을 재활용하지 않습니다. 이 기능은 드라이버 지원이 깨진 네트워크 어댑터와 VPN 드라이버, 스팸, 바이러스 또는 스파이웨어 필터와 같은 일부 가상 네트워크 공급자에 유용합니다.

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


답변

Windows 7 Pro 상자에서 Apache 2.4.16을 실행 중이며 약 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


답변