Не удается получить бесплатную конечную точку для рабочего abc из 1 слотов

#apache #mod-jk

#apache #мод-jk

Вопрос:

Недавно мы перешли со старого Apache с prefork на 2.4.9 с worker, настроенным как

 ServerLimit         16
StartServers         2
MaxRequestWorkers  150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
  

В то же время мы переключились с mod_jk 1.2.37 на 1.2.40. Теперь мы время от времени получаем:

 20140625 18:04:29  [32187:139712338515728] [warn] ajp_get_endpoint::jk_ajp_common.c (3229): Unable to get the free endpoint for worker abc from 1 slots
20140625 18:04:29  [32187:139712338515728] [error] jk_handler::mod_jk.c (2744): Could not get endpoint for worker=abc
20140625 18:04:29  [32187:139712338515728] [info] jk_handler::mod_jk.c (2806): Service error=0 for worker=abc
20140625 18:04:29  500  "/abc/search?xyz=2" 534b abc:- 0.200348s
  

Что такое 1 слот? Разве mod_jk не должен динамически настраивать себя в соответствии с Apache? Я обнаружил, что при «высокой» нагрузке (примерно после 20 одновременных запросов) это становится более вероятным с большим ThreadsPerChild количеством. В то время как с ThreadsPerChild 1 этим, похоже, вообще ничего не происходит, что фактически сводит меня к эквиваленту prefork.

Я что-то контролирую или mod_jk получил сбой параметров Apache в 1.2.40?

Ответ №1:

В документе для connection_pool_size говорится:

JK автоматически обнаружит это число для веб-сервера Apache и установит размер пула на это значение.

Оказывается, это не так. По умолчанию 1 используется значение . Установка этого значения в то же значение, ThreadsPerChild что и устранение проблемы.