너무 오래 걸리는 서버 프로세스가 있다고 가정 해 보겠습니다. 고객은 "시간 초과"라고 불평합니다.Apache 프로세스가 중단되었습니다. 얼마나 오래 갈 것입니까?
내가 틀렸다면 정정 해주세요.하지만이 시간 초과는 아파치의 타임 아웃 설정과 관련이 있지만 반드시 그런 것은 아닙니다. 문제의 페이지를 테스트 할 때 신뢰할 수있는 시간을 확보하지 못했기 때문에 대부분의 경우 브라우저가 회전 할 것입니다.
the documentation에 설명 된대로 클라이언트에 연결하는 데 문제가있는 경우 제한 시간 설정이 적용됩니다. 하지만 연결 상태가 좋으면 연결을 닫을 때까지 클라이언트에게 달려 있습니다 (저는 믿습니다).
클라이언트가 브라우저를 닫을 경우 아파치가 시간 제한 (내 경우 300 초)에 도달하여 프로세스를 종료한다는 의미이기도합니다. 이것은 사실이 아닌 것 같습니다. 여기
내가 그것을 테스트 방법은 다음과 같습니다
내가 서버에서 일부 코드에 while 루프를 추가 :
too_long = 2000
tstart = time.time()
f = open('/tmp/timeout_test.txt', 'w')
while True:
time.sleep(100)
elapsed = time.time() - tstart
f.write('Loop, %s elapsed\n' % elapsed)
if elapsed > too_long:
break
내가 그 루프를 실행하는 웹 페이지를 열고, 서버에서 netstat 실행 :
~$ netstat -np | grep ESTAB | grep apache
tcp 0 0 10.102.123.6:443 10.102.119.101:53519 ESTABLISHED 16534/apache2
tcp 0 0 127.0.0.1:60299 127.0.0.1:5432 ESTABLISHED 16534/apache2
(즉, 서버가 10.102.123.6에있다, 10.102.119.101 날입니다)
내가 다음 브라우저를 닫고 NETSTAT 줄 것을 reran :
~% netstat -np | grep ESTAB | grep apache
tcp 0 0 127.0.0.1:60299 127.0.0.1:5432 ESTABLISHED 16534/apache2
내 연결이 사라,하지만 서버가 루프에 여전히, 나는 실행하여 확인할 수 :
~% lsof | grep timeout
apache2 16534 www-data 14w REG 8,1 0 536533 /tmp/timeout_test.txt
아파치 프로세스가 아직 열려 해당 파일을 가지고 의미한다. 다음 2000 초 동안 실행했을 때 :
~% cat /tmp/timeout_test.txt
나는 아무것도 얻지 못했습니다. 2000 초가 지나면 netcat 라인은 아무것도 생성하지 않았고 tmp 파일은 while 루프의 출력으로 채워졌습니다.
그래서 아파치 프로세스는 클라이언트 연결에 관계없이 요청 된대로 처리하는 것 같습니다. 그 루프백 연결은 무엇에 관한 것입니까?
파이썬 인터페이스에 어떤 아파치를 사용하고 있습니까? mod_python? fcgi? CGI? –
mod_wsgi를 사용하고 있습니다. – EMiller
* Apache 프로세스를 포기했습니다. 얼마나 오래 갈 것입니까? * 휴식을 취할 때까지 먹거나, 부모를 찾거나 죽을 때까지 기다리십시오. – voyager