서버 처리시간이 긴 요청의 경우 60초가 넘어가는 시점에 timeout 이발생
관련 설정값을 찾아보려고 인터넷 뒤져본 내용입니다.
mod_jk의 workers.properties 설명
<timeout 설정>
하나의 tomcat worker에 전달되어 서비스가 되도록 한다.
worker.list=tomcat worker.tomcat.type=ajp13 worker.tomcat.port={portnumber} #worker.tomcat.connect_timeout=1000 #worker.tomcat.prepost _timeout=1000 #worker.tomcat.socket_timeout=3 #worker.tomcat.reply_timeout=1000 |
Tomcat Instance의 GC time, 통신 속도, 트래픽을 고려해서 개발자가 mod_jk의 timeout설정을 해야 한다.
아래 Timeout 설정에 하나라도 만족이 되면, mod_jk는 해당 Tomcat Instance에 대해서 에러로 처리되고, 특정기간(recover_time : 60초)동안 소켓을 전달하지 않는다.
실제 정확한 Timeout은 연속 시도 값(reties 속성값) 과 연속 시도 대기 값(retry_interval 속성값)에 따라서 영향을 받는다.
현재 reties default 값은 2, retry_interval 값은 100ms이므로, 실제 Timeout 값은 아래와 같다.
실제 Timeout은 (2 * xxx_timeout ) + 100ms이다.
위 설정의 의미를 설명한다.
* worker.list=tomcat : worker는 tomcat worker 하나만 지정한다.
* worker.tomcat.type=ajp13 : 로 Apache Http 서버와 Tomcat 서버가 통신하는 protocol은 ajp 13이다.
* worker.tomcat.connect_timeout=1000 : jk와 Tomcat Instance 간 연결이 완료된 후, arj13 protocol에서의 cping request에 대한 cpong respone timeout 을 1000ms로 지정한다.
* worker.tomcat.prepost _timeout=1000 : jk와 Tomcat Instance 간의 요청이 전달이 되기전 arj13 protocol에서의 cping request에 대한 cpong respone timeout 을 1000ms로 지정한다.
* worker.tomcat.socket_timeout=3 : jk와 Tomcat Instance간의 응답 대기 시간이 3초 되면, timeout이 된다. 이 응답대기 시간은 TCP socket 내부적인 상태에 대한 timeout을 의미한다.
* worker.tomcat.reply_timeout= 1000 : jk와 Tomcat Instance 간의 의미있는 요청과 응답간의 시간에 대해서 1000ms timeout으로 지정된다.
내부 IDC에서는 방화벽을 쓰지 않기 때문에, socket_keepalive(디폴트 false)설정은 따로 지정하지 않는다.
connection_pool_timeout을 지정할 경우, Tomcat Instance에서의 connectionTimeout 설정과 같이 설정해야 한다.
.....
http://knight76.tistory.com/entry/modjk의-workersproperties-설명
아파치<->제이보스로 연결되어 있고 업무 애플리케이션에서 큰 파일을 업로드하면서 아파치에서는 응답없음 메세지가 화면에 나타나고, 제이보스는 계속해서 파일업로드 처리를 하여 정상 종료되었을 경우 어디를 보아야 하는지 알아보자
.....
http://mobicon.tistory.com/245
>아파치 설정시에 위의 문장처럼 Timeout 이란 옵션이 있는데..
>
>이것이 의미하는 것은 클라이언트가 서버의 임의의 페이지를 열때 그 페
>
>이지가 5분동안에 다 열리지 않는다면 종료하라는 의미인가요 ?
>
>혹은 HTTP(특정웹문서의 링크)를 통해서 특정파일을 다운받을 때 다운로
>
>드 시간이 경과되었다는 메세지는 Timeout 이란 옵션과 관계가 있는 건
>
>가요.. ?
http://www.linuxchannel.net/board/read.php?no=1894&table=qna
관련 답변
아파치 제공문서(설정파일 포함)에 의하면,
Timeout 300
-The number of seconds before receives and sends time out.
-The TimeOut directive currently defines the amount of time Apache will wait for three things:
1.The total amount of time it takes to receive a GET request.
2.The amount of time between receipt of TCP packets on a POST or PUT request.
3.The amount of time between ACKs on transmissions of TCP packets in responses.
인데 번역(?)하자면,
- 받고/보내는 time out의 초단위 시간
- 아파치가 다음의 3가지 사항을 기다리는 시간으로 정의됨
1. (아파치가 클라이언트로 부터) GET 요청(GET 방식의 URL요청)을 받는데 걸리는 시간. - (요청)
2. (아파치가 클라이언트로 부터) POST나 PUT 방식의 요청에 대한 TCP 패킷을 받는데 걸리는 시간. - (요청)
3. (아파치가 클라이언트에게) TCP 패킷을 전송할때 ACKs 세그먼트를 보내는데 걸리는 시간 - (응답)
위의 내용을 쉽게 이해할것 같지만,
TCP/IP 네트워크에서 "TCP 3 way handshaking"라는 TCP의 제어기능을 이해해야만
Timeout의 개념을 알 수 있습니다.
질문의 내용은 3번의 응답에 관한 내용인데, 파일을 다운로드할때는 3번의 응답 과정이 모두 끝나고
실제로 Data 패킷을 전송하는 단계이므로 Timeout과 관계가 없습니다.
그렇게 때문에 아주 덩치 큰 파일(100M 이상)을 HTTP 프로토콜을 이용해서 다운로드할때
5분 이상이 걸려도 Time out이 되지 않는 이유가 여기에 있습니다.
.....
http://www.linuxchannel.net/tip/apache-timeout.txt
worker.template.socket_timeout=600000
worker.template.reply_timeout=600000
http://blog.naver.com/nostalgia489/50173295376
아래 링크는 기타 기본 설정값들 설명..
문제는 reply_timeout 으로 추정되는 속성값을 workers.properties 에 위와같이 설정(600초) 해주었으나 마찬가지로 60제한이 걸린다는 ...ㅡㅡ;
다른 원인인듯 합니다. 다시 찾아보는중..