Итак, я запускаю Tomcat (8.0) за Apache (2.4) в Windows Server 2012 и использую ProxyPass для прохождения всего трафика. Все работает нормально, но всякий раз, когда я ничего не делаю в течение 60 секунд, а затем снова попадаю на сервер, я получаю задержку в 8-20 секунд, как будто apache создает новый процесс для обработки запроса.
Моя конфигурация в значительной степени является стандартной, которая поставляется с Apache Haus, с добавлением прокси-сервера, который, как я считаю, является виновником:
ProxyPass /static/ !
ProxyPass / http://localhost:8088/
ProxyPassReverse / http://localhost:8088/
Я добавил
/ static /!
исключение, чтобы увидеть, возникнет ли такая же проблема с обслуживаемыми статическими файлами, и, по-видимому, это так. Я еще больше сузил его, закомментировав все материалы ProxyPass и проверив, что мой статический файл всегда загружается быстро. Затем я раскомментировал материал ProxyPass и запросил только свой статический файл, и он снова всегда быстро возвращался. Но как только я нажимаю URL-адрес, который ведет меня через прокси, подождите минуту, а затем снова нажимаю его, что-то идет ужасно неправильно. Ниже приведены выходные данные сетевого монитора для двух запросов, первый из которых статический файл запрашивается второй раз после 1-минутной задержки до использования прокси, второй - после того, как прокси использовался дважды с задержкой между запросами прокси.
3501 4:17:48 PM 10/21/2015 104.2752287 httpd.exe HTTP HTTP:Request, GET /static/index.html
3502 4:17:48 PM 10/21/2015 104.2760830 httpd.exe HTTP HTTP:Response, HTTP/1.1, Status: Not modified, URL: /static/index.html
Через (8 секунд, чтобы вернуться):
24232 4:26:13 PM 10/21/2015 608.7355960 httpd.exe HTTP HTTP:Request, GET /static/index.html
24775 4:26:20 PM 10/21/2015 616.0896861 httpd.exe HTTP HTTP:Response, HTTP/1.1, Status: Not modified, URL: /static/index.html
Я замечаю больше этой строки SynReTransmit после того, как она изначально была нарушена, не уверен, актуальна ли она:
24226 4:26:13 PM 10/21/2015 608.7286692 httpd.exe TCP TCP:[SynReTransmit #24107]Flags=......S., SrcPort=61726, DstPort=HTTP(80), PayloadLen=0, Seq=1157444168, Ack=0, Win=8192 ( Negotiating scale factor 0x2 ) = 8192
Но в основном каждый вызов, будь то статический файл или прокси-сервер, если с момента последнего вызова прошло более 60 секунд, будет длиться вечность, чтобы получить ответ!
Любые идеи?
ОБНОВЛЕНИЕ: я использовал более старую версию Apache, 2.4.12, но обновление до последней версии, 2.4.17, не помогло. Пробовал всевозможные настройки keepalive, вроде ничего не помогает. На другом форуме я был направлен на эту ветку разработчиков apache, в которой есть предложенный патч для решения похожей проблемы, думаю, я дождусь обновления apache: