所以我在Windows Server 2012上运行Apache(2.4)后面的Tomcat(8.0)并使用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 dev线程,该线程有一个类似问题的声明,猜猜我会等待apache更新:
答案 0 :(得分:4)
尝试明确调整ProxyReceiveBufferSize:
# For increase throughput (bytes)
ProxyReceiveBufferSize 2048
答案 1 :(得分:1)
在httpd config中,添加以下几行:
AcceptFilter http none
AcceptFilter https none
EnableSendfile Off
EnableMMAP off
就在这一行之后:
Listen 80
我的回复不到2次,但仍然比平常慢。