Среда: Webphere 6, Solaris box, толстый клиент, веб-приложение Java.
Количество запросов может быть от 400 до 600. Для каждого запроса к серверу я создаю 15 потоков (используя Java ExecutorService) для одновременного запроса 15 различных веб-сервисов, группирую все данные ответов вместе и отправляю их обратно пользователю. Нагрузочный тест не проходит почти у 150 - 170 пользователей. В БД, обслуживающей эти веб-сервисы, наблюдаются всплески ЦП и памяти, и в конечном итоге после очень короткого периода времени происходит сбой сервера приложений. Время отклика веб-сервиса составляет 10-12 секунд максимум и 4-6 секунд минимум. Размер пула соединений БД - 40.
Я предполагаю, что 150 запросов создают 150 * 15 = 2250 потоков, а ресурсы сервера приложений увеличиваются и, следовательно, выходят из строя. Итак, я хочу использовать threadpool сервера приложений и иметь threadCount, равный 100 (может быть, не очень хорошее число ..). Меня беспокоит то, что со 100 потоками я могу обработать первые 6 (6 * 15 = 90) запросов и 10 вызовов 7-го запроса. Следующие запросы должны ждать 10-15 секунд для возврата потоков, а затем еще 10-15 секунд для вызова собственного веб-сервиса. Такой подход вообще хорош?
Другая идея заключалась в предоставлении асинхронных bean-компонентов в Websphere. Какой из них соответствует моим требованиям.
Пожалуйста, предложите !!. Вызов одного веб-сервиса за другим занимает в общей сложности 15 * (скажем, 4 секунды для каждого запроса) = 60 секунд, что действительно плохо. Поэтому я хочу собрать вместе веб-сериалы.