답변:
이미 2 가지 좋은 답변이 있지만 아마도 가장 중요한 실제 문제 는 아직 언급되지 않았습니다.
먼저 OP는 2 개의 이전 답변 과이 작은 블로그 게시물 을 읽고 Keepalives가 무엇인지 이해할 수 있습니다. (저자는 TCPI / IP가 연결이 더 길어질수록 "빠르게"되는 부분에 대해 자세히 설명하지 않습니다. 사실, 오래 지속되는 연결은 IP 창 크기 조정의 이점이 있지만 파일이 없으면 그 효과는 중요하지 않습니다. 또는 지연 지연 제품이 비정상적으로 큰 경우)
Apache를 사용할 때 HTTP Keepalive에 대한 큰 주장 은 Apache 프로세스를 차단한다는 것입니다. 즉, keepalives를 사용하는 클라이언트는 클라이언트가 연결을 닫거나 시간 초과에 도달 할 때까지 'his'Apache 프로세스가 다른 클라이언트를 처리하지 못하게합니다. 같은 기간 동안이 Apache 인스턴스는 다른 많은 연결을 제공 할 수있었습니다.
이제 매우 일반적인 Apache 구성은 Prefork MPM 과 PHP / Perl / Python 인터프리터 및 언급 된 언어의 애플리케이션 코드입니다. 이 경우 각 Apache 프로세스는 수 메가 바이트의 RAM (인터프리터 및 애플리케이션 코드와 연결된 Apache)을 차지한다는 의미에서 "무거운"것입니다. 이것은 각 keepalive'd Apache 인스턴스의 차단과 함께 비효율적입니다.
일반적인 해결 방법 은 서로 다른 구성으로 2 개의 Apache 서버 (동일한 물리적 서버 또는 2 개의 서버)를 사용하는 것입니다.
그런 다음 필요에 따라 이러한 동적 및 정적 컨텐츠 분리를 확장 할 수 있습니다 ( 예 :
Apache 차단을 피하는 또 다른 방법 은 Perlbal 과 같은보다 스마트 한 연결 처리 기능을 갖춘로드 밸런서를 사용하는 것 입니다.
.. 그리고 훨씬 더. :-)
Keepalives는 어떤 경우에는 좋을 수 있으며 다른 경우에는 매우 나쁠 수 있습니다. 새 연결을 설정하는 데 드는 시간과 노력이 줄어들지 만 연결 유지 시간이 초과되는 동안 서버 리소스가 연결됩니다. 예 :
보다시피 KeepAliveTimeout은 서버 성능을 최적화하는 데 큰 역할을합니다.
사용 패턴을보고 스스로 결정하십시오.
KeepAlive On을 반드시 사용해야합니다.
만나다:
http://httpd.apache.org/docs/2.0/mod/core.html#keepalive
이렇게하면 브라우저에서 단일 TCP 연결을 다시 사용하여 여러 쿼리를 보냅니다. 일반적으로 웹 사이트에는 많은 구성 요소 (HTML 페이지, 자바 스크립트 코드, 이미지)가 있습니다. 이러한 리소스가 동일한 도메인에 있으므로 동일한 서버에서 서비스를 제공 할 수있는 경우 브라우저가 새로운 TCP 연결을 설정할 필요가 없으므로 KeepAlive 연결은 성능을 크게 향상시킵니다.
브라우저는 일반적으로 도메인에 약 3 개의 병렬 연결을 엽니 다. 사이트에 18 개의 개체가 있다고 가정 해 봅시다. 브라우저는 3 개의 연결을 열고 KeepAlive 모드를 사용하여 각 연결에서 6 개의 개체를 다운로드합니다. KeepAlive가 없으면 18 개의 TCP 연결을 열어야하는데 이는 매우 느립니다.
대부분 또는 모든 최신 브라우저는 HTTP / 1.1과 호환되므로 작동해야합니다.
Squid와 같은 특정 HTTP 프록시는 HTTP / 1.1과 호환되지 않지만 어쨌든 KeepAlive 연결 사용을 요청합니다.