Я пишу инструмент бенчмаркинга для работы с веб-приложением. Проблема, с которой я сталкиваюсь, заключается в том, что первый запрос к серверу всегда занимает значительно больше времени, чем последующие запросы. У меня возникла эта проблема с http-клиентом apache 3.x, 4.x и https://code.google.com/p/google-http-java-client/. HTTP-клиент apache 4.x показывает самую большую разницу (первый запрос занимает примерно в семь раз больше времени, чем последующие. Для Google и 3.x это примерно в 3 раза дольше.
Мой инструмент должен иметь возможность сравнивать одновременные запросы с потоками. Я не могу использовать один экземпляр, например. HttpClient и вызовите его из всех потоков, так как это вызывает исключение Concurrent. Поэтому мне приходится использовать отдельный экземпляр в каждом потоке, который будет выполнять только один запрос. Это резко меняет общие результаты.
Я не понимаю такого поведения. Я не думаю, что это связано с механизмом кэширования на сервере, потому что а) рассматриваемое веб-приложение не использует кэширование (насколько мне известно) и б) этот эффект также виден при первом запросе www.hostxy.com, а затем www.hostxy.com/my/webapp.
Я использую System.nanoTime() непосредственно до и после вызова client.execute(get)
или get.execute()
соответственно.
Кто-нибудь знает, откуда такое поведение? Выполняют ли сами эти httpclients какое-либо кэширование? Буду очень благодарен за любые подсказки.