기술지원 문의

request-timeout과 live-time설정
류이 / 2007-03-05 17:13

사용자요청 응답시간을 설정할려고 하는 중에 포럼에서 request-timeout과 live-time설정하여 응답시간을 설정할 수 있다는 것을 알았으나,

실제로 설정하면 레진이 정상적으로 로딩되지 않습니다.

 

레진 버전이 3.0.15 입니다.

request-timeout과 live-time설정을 어떻게 하면 되는지요?

[답변]request-timeout과 live-time설정
권용찬 / 2007-03-07 02:56

소켓 튜닝부분은 설명이 난해한 관계로 답글을 다는데 시간이 좀 걸렸습니다. ^^

나름대로 쉽게 풀어본다고 했지만... -.-;; 어떨지 모르겠습니다. 이런 부분은 보통 엔지니어가 처리합니다만 궁금하시다니   부탁하면 합니다. ^^

 

먼저 ... live-time 과 request-timeout은 Resin 2.x 버젼에서 WAS의 HTTP또는 SRUN 리스너의 소켓제어를 위하여 사용되는 구성 테그 입니다.

 

=============2.x에서 Time out 제어값 들에 대한 설명 ==============
<live-time>
For load balancing, how long the server should keep an idle srun connection open before closing it. <live-time> must be less than <request-timeout>.
Default: Defaults to 10 sec.
웹서버에서 Resin으로 jsp나 Servlet 처리를 넘기기 위해 open한 접속에서  요청이처리되고 응답이 끝난후 해당 소켓이 대기 상태로 된 후 재사용을 위해 대기하는 시간 입니다.
해지시간 = 요청처리시간 + 대기시간(10초)
일반적으로 이 설정은 기본값을 유지합니다.

 

<request-timeout>
Time in seconds for a connection to timeout. An idle client uses a TCP connection until it quits. request-timeout limits the time taken up by idle clients.
Default: Defaults to 65 sec.
live-time이 정상적으로  idle상태로 떨어진 다음에 얼마나 있다가 해지할 것인가의 의미로 정상적인 처리를 하기 위한 것이라면
request-timeout은 비정상적으로 오랜시간동안 An idle(=Active)상태인 TCP접속에 대하여 최대 얼마나 기다려 줄것인가를 설정합니다.

이 설정은 일반적으로 기본값을 유지하지만 시스템에 따라 TCP Kernel parameter의 조정이 실패하여 TCP쪽 연결이 너무 오래 지체 되거나 Apache Proxy Module의 잘못된 동작으로 사용자요청에 의해 Apache가 생성한 소켓이 오랜시간 지속될 경우 이를 해지하기 위하여 설정을 줄여주기도 합니다.

이 설정값은 JAVA 프로그램이 처리완료되는 일반적인 시간보다는 커야 하며 경험값 으로 최소 10초 이상은 설정할 것을 권장합니다.

 

=============3.0 & 3.1에서 Time out 제어값 들에 대한 설명 =============
상기 구성정보는 Resin 3.x에서는 변경되었으며
live-time과 request-timeout은 3.x 버젼에서 개념이 변경되어 
사용자나 Apache에서 넘어오는 처리에대한 time out처리에 관련된 테그는 다음과 같습니다.

<client-live-time> : 컨넥션이 생성된 후 부터 대기시간/ default 30s
                   (이시간이 지나면 끊어짐:2.x의 request-timeout과 유사)

<read-timeout> : srun 컨넥션이 종료된 후 대기시간 / defaul 65s
               ( 처리완료후 이시간이 지나면 없어짐:2.x의 live-time과 유사)

<write-timeout> : 사용자의 요청이 완전하게 수신되기까지의 대기시간 / defaul 65s
(일반적으로 중요하지 않음)

 

<예제>
==레진 단독 운영서버의 경우 (사용자 요청이 바로 Resin으로 들어옴)
<srun port=\"6802\" read-timeout=\"30s\" write-timeout=\"30s\"/>

 

==웹서버 연동 서버의 경우 (사용자 요청중 Web Server에서 필요한 부분만 들어옴)
   <cluster>
     <client-live-time>20s</client-live-time>
     <srun id=\"a\" port=\"6802\" read-timeout=\"30s\"/>
   </cluster>


상기 3개 값으로 분리된 이유는 2.x에서는 Clustering 과  web server를 통한 loadbalnce에 대한 값이 분리되지 못하여 상세한 튜닝이 불가능하여 3.x부터는 이러한 값이 분리 되었습니다.

 

!!값을 설정할 때에는 read-timeout이 항상 client-live-time값 보다 크게 해주셔야 하는점을 주의 하십시요 잘못 설정될 경우 구동이 되지 않을 수 있습니다.

 

튜닝을 위한 값의 기준은 사실 절대값이 없습니다.


기본 65sec는 30sec로 줄여주는 것이 성능에 도움이 되지만 너무 많이 줄일 경우 정상적인 Applicaiton중에서 시간이 오래 걸리는 처리의경우 문제점을 유발 할 수 있으므로 실제 운영단계에서 설정후 모니터링을 통하여 적정설정을 조정하는 튜닝작업이 필요할 수 있습니다.

일반적으로 상기 예제에서 제공해드린 값을 기준으로 하시면 무리가 없습니다.

그리고 상기 파라메터들은 3.0 모두에 적용되는 것이 아니라 중간중간에 개선 된 부분이라 현재 버젼이 라이센스가 있으신 버젼이라면 3.0 최근 버젼으로 업그레이드 하셔야 문제점이 없을 것입니다.

 

도움이 되셨기를 바라며 이만 줄입니다.