#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
что и устранение проблемы.