使用ProxyPass后,apache请求非常慢

时间:2015-10-22 15:14:56

标签: apache tomcat proxypass

所以我在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更新:

http://marc.info/?l=apache-httpd-dev&m=144543644225945&w=2

2 个答案:

答案 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次,但仍然比平常慢。

来自https://www.apachelounge.com/viewtopic.php?p=26601