The Keep-Alive extension to HTTP/1.0 and the persistent connection feature of HTTP/1.1 provide long-lived HTTP sessions which allow multiple requests to be sent over the same TCP connection.
In some cases this has been shown to result in an almost 50% speedup in latency times for HTML documents with many images.
To enable Keep-Alive connections, set KeepAlive On
HTTP프로토콜상 한번 접속 후 자료를 모두 전송하면 접속을 끊어 버리지만 KeepAlive On상태에서는 KeepAliveTimeOut시간 동안 접속을 끊지않고 다음 접속을 기다린다.
순수 html파일, 이미지파일 등으로만 구성된 서버(동적파일이 없는서버)에 KeepAlive On으로 설정할 경우 50%정도의 성능 향상을 보인다고 한다. 단 이와 같은 성능향상을 보일려면 서버가 바쁘지 않아야 한다.
아주 바쁜 서버 환경에서 KeepAlive On을 설정해 놓을 경우 모든 접속자 마다 연결 유지를 해 놓아야 하기 때문에 아파치 프로세스수가 기하 급수적으로 늘어나 MaxClient값을 초과하게 된다.
또한 On상태일때 접속유지 하는 프로세스들 때문에 메모리를 그 만큼 많이 사용하게 된다.
따라서 KeepAlive값은 단순히 On/Off 시킬것이 아니라 접속자, 메모리용량과 연관해서 값을 설정하여야한다.
KeepAlive 설정
접속자가 많지만 메모리가 충분하다 : On
접속자가 많지만 메모리 여유가 없다 : Off
접속자가 적고 메모리가 충분하다 : On
접속자가 적고 메모리 여유가 없다 : Off
- 메모리가 충분하다는 의미는 접속자가 MaxClient 값에 도달했을 경우라고 swap 메모리를 사용하지 않는상태를 말한다.
KeepAlive정의
특정 한 프로세스가 특정 사용자의 지속적인 요청 작업들을 계속해서 처리하도록 함.
즉, 첫 요청 시에 열어 놓은 Port를 끊지 않고, 지정된 KeepAliveTimeout동안 idle하면 끊는다.
KeepAliveTimeout값이 채워지기 전에 다시 요청이 온다면 다시 KeepAliveTimeout은 다시 0부터 Count를 수행한다.
최종적으로, KeepAliveTimeout 지정한 시간만큼 idle하면 그때, 해당 Port연결을 끊는다.
설정법
KeepAlive [On/Off]
MaxKeepAliveRequest [회수]
KeepAliveTimeout [초]
사용 예
KeepAlive On
MaxKeepAliveRequest 100
KeepAliveTimeout 60
개인적인 견해
Client 수가 많을 경우, 상당히 민감하게 작용하는 부분이므로 신중히 설정하여야 한다.
보통 단발성 요청들이 많을 경우, KeepAlive를 Off하는 것이 좋을 수도 있다.
허나, KeepAlive를 사용하면 웹브라저상에서의 체감속도는 빨라진다는것을 잊지 말자.
필자의 경우, 예전에 그림 파일들이 엑박이 뜨는 문제가 발생하여 해결하고자 사이트 지원을 나갔었는데,
이 문제는 특정 날에만 발생을 하였다. Access로그를 분석한 결과, 해당 날에 요청이 급격히 많았음을 확인하였고,
Errorlog상에서는 많은 요청들이 웹서버단에서 튕겨버림을 확인하였다.
이때, KeepAliveTimeout의 값은 60초 였으며, 서비스 성격 특성상 많은 이미지 파일들의 요청이 src="http://~ " 형식으로 되어 있어서 이 이미지 처리를 위해 매번 이미지 요청시마다 소켓이 새로 생성되었던 것이였다.
그에 따라, KeepAliveTimeout의 수치를 10초 내로 줄였다. 그러자 해당 문제는 해결 되었다.
출처 :
http://cafe.rootcenter.com/130079030932
http://mcpaint.t