이 서문을 설명하기 위해 저는 인터넷을 통해 해결책을 찾고자했습니다. 아래는 몇 가지 정보를 제공 한 최신 링크 일 뿐이며 어느 것도 작동하지 않는 것 같습니다. 아래로 이동Apache Webserver, Tomcat, AJP, "모든 작업자가 경로에 대해 오류 상태입니다."
[Tue Jan 07 14:56:12.158345 2014] [proxy_ajp:error] [pid 12094:tid 140002805655296] (70007)The timeout specified has expired: AH01030: ajp_ilink_receive() can't receive header
[Tue Jan 07 14:56:12.158409 2014] [proxy_ajp:error] [pid 12094:tid 140002805655296] [client 10.4.65.146:58551] AH00992: ajp_read_header: ajp_ilink_receive failed, referer: http://xxxx/yyy/
[Tue Jan 07 14:56:12.158430 2014] [proxy_ajp:error] [pid 12094:tid 140002805655296] (70007)The timeout specified has expired: [client 10.4.65.146:58551] AH00878: read response failed from 10.4.3.33:8009 (tomcatworkerX), referer: http://xxxx/yyy/
[Tue Jan 07 14:56:12.229559 2014] [proxy_balancer:error] [pid 12094:tid 140002932012800] [client 10.4.230.138:57407] AH01167: balancer://lb: All workers are in error state for route (tomcatworkerX), referer: http://xxxx/yyy/zzz
사용자 : 내가 thusly 히 로그에 표시되는 오류를 방지 할 수 없었던 나는 아래 개요 많은 구성 변경에도 불구하고
Tomcat stops responding to Apache
"서버를 사용할 수 없음"화면이 표시되지만 몇 분 후에 연결이 복원됩니다. 때로는 동일한 서버 연결이 여러 번 위/아래로 이동하는 경우가 있습니다. 이것은 같은 (내가 끈적 세션을 사용하는)에 사용자의 행동으로 인해 수 있지만 이것을 확인하지 못했습니다.
필자의 구성은 AJP를 통해 구성된 Tomcat 작업자 4 명과 함께 Windows 환경에서 실행되는 단일 Apache 웹 서버 인스턴스를 사용한다는 것입니다. 현재 모든 Tomcat 작업자는 Windows에서 별도의 호스트로 호스팅됩니다.
내 시나리오의 모든 호스트는 강력한 운영 환경의 VM이며 각각 여러 개의 코어가 있습니다.
아파치 버전 :
Server version: Apache/2.2.22 (Win32)
Tomcat은 각 BalancerMember이 구성 매개 변수가
버전 7.0.29입니다 :
keepalive=On timeout=600 ttl=600
현재 기본 커넥터를 사용하여 각 톰캣 인스턴스 (org.apache .cooyote.ajp.AjpAprProtocol).
커넥터 구성 :
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" maxThreads="450" connectionTimeout="600000" />
오라클 ojdbc15_g JDBC 드라이버를 통해 자체가 오라클에 연결하는 응용 프로그램, v11.2.0.3.0. 내가 관찰 한
것들 :
- 그것은 Tomcat 서버는 아파치의 요청으로 오버런지고 있다는 표시되지 않습니다. 이것은 로그 활동을 관찰하고 jconsole을 통해 스레드 활동으로 보강 된 Apache 웹 서버 서버 상태 데이터를 통해 확인하는 것입니다. (위에서 설정 한 한계 근처에서 실행 스레드 수가 증가하는 것을 결코 볼 수 없습니다.) 이것은 ~ 400 명의 사용자에게 서비스를 제공하는 내부 응용 프로그램이며 대부분이 동시에 실행되지 않습니다. 부하가 문제가되지 않아야합니다.
- jconsole을 사용하여 원격으로 Tomcat 인스턴스를 모니터링 할 때 스레드 교착 상태 문제가없는 것 같습니다.이 문제를 확인하기 위해 ajp-apr-8009-exec- # threads를 확인하고 대부분은 기다리는 동안 일부는 적극적으로 처리를 볼 수 있습니다.
- 우리는 일부 장기 실행 요청을 가지고 있습니다 - 일부는 때때로 위에서 설명한 600s 제한 시간을 초과 할 것입니다. 이것은 현재 내가 현재 탐색하고있는 영역입니다. 요청의 길이에 대한 이유는 일반적으로 시간이 걸리는 초대형 데이터 저장소에서 페더레이션 된 검색이지만 일반적으로 몇 초 안에 반환됩니다.오랜 시간이 걸리면 일반적으로 사용자가 키워드 검색을 제대로하지 않아 오라클이 결과를 구축하는 동안 상당한 시간 동안 차단하게됩니다. 현재 요청/apr exec 스레드와 별도의 스레드에서 실행되도록 리팩토링 중이며 실행하는 데 280 초 (4 분 40 초)가 걸리면 스레드가 종료되고 사용자에게 오류가 반환됩니다. ; 이 방법은 요청을 처리하는 데 너무 오래 걸리는 Tomcat을 배제 할 수 있습니다.
내가 지금 시도하고있는 것에 관해서는 구성 할 수있는 능력을 다 써 버렸다고 느낍니다. (가능한 모든 솔루션을 온라인으로 검색하는 것을 포함합니다. 인프라) .. 그래서 나는 플랫폼을 전환하여 다른 전술을 시도하고있다. 나는 Linux 머신에서 Apache Webserver를 실행하고, DNS round-robin을 사용하여 일부 사용자가 Windows가 아닌 Linux를 통해 라우트된다. 이것은 도움이되지는 않지만 Tomcat 작업자는 여전히 동일한 Windows 상자에서 실행됩니다.
현재 Linux 컴퓨터에서도 Tomcat 응용 프로그램을 사용하고 있습니다. 안정적 일 때 (일부 코드 변경은 Windows가 유일한 플랫폼이므로 응용 프로그램을 호스팅하는 것으로 가정하기 때문에 필요합니다) 특정 인스턴스에 동일한 문제가 발생하는지 확인하기 위해이를 작업자로 추가 할 것입니다.
오랫동안 실행중인 요청에 대한 의문이 올바른 길인지 의심 스럽습니다. 나는 다양한 구성 변경을 시도했지만 아무 소용이 없습니다. 오류가 여기에 아파치의 error_log에
스택 오버플로에 오신 것을 환영합니다. 당신이 말했듯이, 귀하의 질문은 서버 오류에 대한 답변을 더 많이 수집해야합니다. 행운을 빕니다. –