http://www.atmarkit.co.jp/flinux/rensai/apache16/apache16b.html

KeepAlive 와 세션의 끊김

 세션튜닝의 시작은 「KeepAlive」부터 생각해보자
KeepAlive는HTTP/1.1부터 나온것으로、클라이언트와의 접속을 보존하기 위한 구조다.
HTTP는「statuless・protocol」로 불리어지며、1회의 요구에(request)접속이 끊긴다.
하지만、하나의 웹페이지를 표시하기 위해 복수의 파일이 필요한 경우가 대부분이므로、
하나의 요구에 대해 접속을 끊는것은 비효율적이다.
그래서 생각한 것이KeepAlive이다.
한번 접속을 하면 조건을 만족시킬때가지 접속을 보존하는 것이다.

Apache에서 KeepAlive를 유효로할지 무효로 할지를 결정하는것이 「KeepAlive」디렉티브다.
디폴트는「On」으로 되어있어서 처음의 인스톨한 상태로 사용하면 KeepAlive는 유효로 되어있다.
편리한 구조이기 때문에 기본적으로는 유효로 사용하지만、접속을 길게 유지하면  오히려 효율이 떨어지므로
주의를 요한다.

왜 효율이 떨어질까?
그것은 request가 끝나면 접속을 끊어야 하지만 그런 구조는 갖추어져 있지 않다.
request가 끝난 클라이언트에 대해서 언제까지나 접속을 유지하고 있으면 리소스의 낭비가 된다.
그렇기 때문에 적당히 접속을 끊어두어야 한다.

그것을 설정하는 부분이 「MaxKeepAliveRequests」디렉티브와「KeepAliveTimeout」디렉티브다.
MaxKeepAliveRequests는 접속이 이루어진 후 부터 끊을때까지를 받을 수 있는 request수、
KeepAliveTimeout은 접속되어진 세션으로부터 request가 요청되지 않을때 부터, 몇초 지난 후에 끊을까에 대한 설정이다.

연속으로 request가 요청되더라도 대량의 request를 하나의 세션으로 받아들인다면 다른 세션에게
할당하기가 쉽지않다. 또한 접속을 빨리 끊는다면 제접속을 받아들일때의 오버해드가 증가하는 것도 고려해야한다.

MaxKeepAliveRequests(디폴트 100)에는 하나의 페이지에 해당하는 평균적인 화일수+α정도를 설정하고
KeepAliveTimeout은 디폴트(15초)보다 작은 값을 설정하는 것이 좋다.

+ Recent posts