Apache mod_proxy_ajp с пулом потоков GlassFish занят - PullRequest
2 голосов
/ 01 сентября 2011

У меня есть Apache 2.2.15, который проксирует запросы к GlassFish 3.1.1 через mod_proxy_ajp, используя настройки по умолчанию как Apache, так и GlassFish. Кажется, что настройка работает нормально в течение очень короткого времени, а затем я получу сообщение об ошибке «Пул потоков занят» в журнале GlassFish, за которым следует ошибка тайм-аута в журнале Apache, и приложение не будет работать снова, пока я не перезапущу GlassFish.

Должен ли я внести изменения в конфигурацию, чтобы предотвратить эту ошибку?

Примечание: система не находится под большой нагрузкой - к ней можно получить доступ только одним браузером, перемещаясь по страницам в приложении. Это предполагает, что проблема может быть ошибкой утечки потока, если это не неверная конфигурация. Ошибка, которую я получаю в браузере: 500: Внутренняя ошибка сервера.

Ошибка в журнале GlassFish:

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

Ошибка в журнале Apache:

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

Моя конфигурация прокси в Apache:

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

1 Ответ

2 голосов
/ 06 сентября 2011

Я задал этот вопрос на форуме GlassFish на java.net и получил ответ о результате:

Вы должны убедиться, что максимальные потоки GlassFish по крайней мере равны Apache.

Полный ответ здесь:

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

Это кажется разумным ответом, поэтому я публикую его здесь для блага других.

Примечание. Один из способов установки потоков, используемых в Apache, заключается в использовании атрибута max следующим образом:

ProxyPass / ajp://mydomain:8009/ max=20
...