В среде сервлетов Java, каковы факторы, которые являются узким местом для числа одновременных пользователей.
- Количество HTTP-соединений, которые сервер может разрешить для каждого порта
- Количество HTTP-соединений, которые сервер может разрешать через несколько портов (у меня может быть несколько профилей WAS на нескольких HTTP-портах)
- Количество сервлетов в пуле
- Количество потоков, настроенных для использования WAS для обслуживания соединений
- ОЗУ, доступная серверу (есть ли какая-либо корреляция между количеством потоков услуг, предполагающих утечку 0-памяти в приложении)
Есть ли другие факторы?
Отредактировано: Чтобы оставить бизнес-логику из-под изображения, предположим, что только один сервлет печатает одну строку в Log4j.
- Может ли мой сервер Tomcat обрабатывать 6000 одновременных HTTP-соединений? Зачем не (файлы обрабатывают? процессорное время на запрос?)?
- Могу ли я иметь размер пула потоков как 5000 (нулевые потоки стоят CPU/RAM)?
- Могу ли я иметь размер пула соединений оракула как 500 подключений (do idle соединения стоят CPU/RAM)?
Возникает ли количество мусора, создаваемого для каждого соединения? Например, если для каждого HTTP-соединения 20KB объектов создаются и оставлены Tomcat.. тогда к моменту обработки 2500 запросов будет использовано 100 мегабайт кучи, и это может вызвать паузу GC 300 мс.
Можем ли мы сказать что-то вроде этого: если Tomcat использует 0,2 секунды процессорного времени для обработки одного HTTP-запроса, тогда он сможет обрабатывать примерно 500 http-соединений за секунду. Таким образом, для 6000 соединений потребуется 5 секунд.