2011-09-01 3 views
2

Apache와 GlassFish의 기본값을 사용하여 mod_proxy_ajp를 통해 Apache 2.2.15 프록시 요청을 mod_proxy_ajp를 통해 받았다. 설치가 매우 짧게 진행되는 동안 GlassFish 로그에 스레드 풀 사용 중 오류 메시지가 표시되고 Apache 로그에서 시간 초과 오류가 발생하고 GlassFish를 다시 시작할 때까지 응용 프로그램이 다시 작동하지 않습니다.Apache mod_proxy_ajp (GlassFish 스레드 풀 사용 중)

이 오류가 발생하지 않도록 구성을 변경해야합니까?

참고 : 시스템 부하가 높지는 않습니다. 응용 프로그램의 페이지를 탐색하여 하나의 브라우저에서 액세스 할 수 있습니다. 이것은 잘못 구성된 것이 아닌 경우 스레드 누출 버그 일 수 있음을 나타냅니다. 브라우저에서받는 오류는 500입니다 : 내부 서버 오류.

글래스 피쉬 로그의 오류는 다음과 같습니다

SEVERE|glassfish3.1.1|org.apache.tomcat.util.threads.ThreadPool|_ThreadID=17;_ThreadName=Thread-2;|threadpool.busy 

아파치 로그의 오류는 다음과 같습니다

[error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header 

아파치에서 내 프록시 구성은 다음과 같습니다

LoadModule proxy_module modules/mod_proxy.so 
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so 
ProxyPass/ajp://mydomain:8009/ 
ProxyPassReverse/ajp://mydomain:8009/ 

과의 GlassFish 설치 후 다음 명령을 실행합니다 :

asadmin create-http-listener --listenerport 8009 --listeneraddress 0.0.0.0 --defaultvs server apache-proxy 
asadmin set configs.config.server-config.network-config.network-listeners.network-listener.apache-proxy.jk-enabled=true 
+0

: 아파치에 사용되는 스레드를 설정하는 방법 중 하나는 과 같이 최대 속성을 사용하는 것입니다 /www.java.net/node/701914), 문제는 스레드 풀의 기본 최대 크기가 너무 작음을 나타냅니다. 크기를 50으로 늘렸으나 크래시를 재현 할 수 없었습니다. 나는 피할 수없는 추락을 지연시키는 것이 아니라고 확신한다. 아직도 답을 다시 확인하고 아마이 설정을 스스로에게 확신시키는 방법에 대한 팁은 프로덕션 용도로는 괜찮습니다. – Ryan

답변

2

나는 java.net에 글래스 피쉬 포럼에이 질문을하고, 효과의 응답 가지고 :

당신은 글래스 피쉬의 최대 스레드가 적어도 아파치 많은 있는지 확인해야합니다. 여기

전체 답변 :

http://www.java.net/forum/topic/glassfish/glassfish/jkenabled-thread-leak

이 내가 다른 사람의 이익을 위해 여기를 게시하도록하겠습니다 있도록 합리적인 대답처럼 보인다.

참고 :/: (HTTP [java.net에 mod_jk 경우 포스트] : 오늘이 링크를 발견

ProxyPass/ajp://mydomain:8009/ max=20 
+0

Apache Prefork MPM의 경우 GlassFish에서 max-thread-pool-size를 설정하는 것이 더 적절할 것이라고 생각하십니까? asadmin set configs.config.server-config.network-config.thread-pools.thread-pool.http-thread-pool.max-thread-pool-size = 50 – Ryan

+1

설명 : Prefork MPM을 사용하면 항상 1 프로세스 당 AJP 스레드. 따라서 Apache MaxClients/ServerLimit을 더 작게 변경하거나 glassfish 풀 크기를 더 크게 (기본 Apache MaxClients는 256) 변경해야합니다! 또는 ProxyPass disablereuse 매개 변수를 사용하십시오. 아니면 작은 ProxyPass ttl 매개 변수로 인해 리소스가 해제 될 수 있습니까? – Ryan