Я поддерживаю приложение, в котором несколько сервисов представлены как веб-сервисы SOAP. Я поздно столкнулся с некоторыми проблемами масштабирования, так как приложение получает больше нагрузки, чем обычно.
Я хотел бы знать, правильно ли я понимаю несколько конфигураций пула: 1. У нас есть конфигурация пула потоков, как показано ниже,
<thread-pools>
<thread-pool name="admin-thread-pool" max-thread-pool-size="50" max-queue-size="1024"></thread-pool>
<thread-pool name="http-thread-pool" max-thread-pool-size="250"></thread-pool>
<thread-pool name="http-thread-pool-internal" max-thread-pool-size="50"></thread-pool>
<thread-pool name="thread-pool-1" max-thread-pool-size="200"></thread-pool>
</thread-pools>
и
<transports>
<transport name="tcp" acceptor-threads="8"></transport>
</transports>
и 2. Конфигурация пула EJB, как показано ниже,
<ejb-container steady-pool-size="0" max-pool-size="50" pool-resize-quantity="10">
Итак, теперь вопросы.
Что произойдет, если пул HTTP-потоков получит задачу, которую необходимо выполнить синхронно, и если в пуле недостаточно экземпляров EJB-компонентов (максимально настроено 50), потому что все экземпляры EJB обслуживают другие HTTP-запросы? Примечание. Мы выполняем поиск JNDI и не используем аннотации @EJB.
Имеет ли смысл увеличивать количество экземпляров EJB (макс.), равное значению http-threadpool?
После выполнения некоторого профилирования было замечено, что код, выполняющий поиск экземпляров EJB, занимает много времени. Означает ли это, что не было доступных экземпляров EJB, и запрос должен был ждать, пока экземпляр не будет освобожден другими запущенными потоками?