У нас есть веб-приложение, обслуживающее запросы для одной из наших служб. У нас он работает на сервере Tomcat 7. Как объяснено ниже, больше деталей не требуется, поскольку у нас есть аналогичные результаты с самым простым сервлетом, который мы могли бы создать.
Мы запускаем нагрузочный тест с помощью jmeter с разным количеством одновременных потоков, выполняющих запросы к нашему сервису в течение минуты. По результатам мы создаем несколько диаграмм со средним временем отклика по сравнению с параллельными потоками и количеством запросов в секунду по сравнению с параллельными потоками.
В нашем тесте около 10 одновременных потоков мы обнаруживаем ограничение пропускной способности, управляемой нашим приложением. Начиная с этого количества потоков среднее время отклика увеличивается, а количество запросов в секунду остается стабильным.
Мы протестировали несколько изменений в нашем приложении, даже удалив всю логику приложения и вернув статический ответ. А также запустили те же тесты на базовом сервлете, который ничего не делает, и мы получили аналогичные результаты: гораздо лучшее среднее время отклика и значения пропускной способности, но предел достигнут примерно в 10 одновременных потоков в тесте.
Мы также провели аналогичные тесты с Apache Benchmark, чтобы исключить проблемы с инструментом тестирования.
Тесты проводились в пуле из 2 серверов. При запуске на локальном компьютере они давали аналогичный результат, но предел пропускной способности был достигнут на уровне около 5 одновременных потоков.
Вот график пропускной способности. Обратите внимание, что значения каждой из строк не важны (например: у некоторых удален доступ к базе данных или даже у большинства логики приложения, поэтому они занимают меньше времени).
Мы хотим понять, откуда берется предел пропускной способности и что мы можем сделать, чтобы его улучшить.
Спасибо, Хорхе.
PS: я бы добавил изображение вместо ссылки, но похоже, что у меня недостаточно репутации :(