tomcat为一些ajax发布请求超时2分钟



我在处理一些AJAX POST请求时出现间歇性超时。设置:Apache 2.2.17->mod_jk 1.2.26->JBoss 4.3 CP01(带有Tomcat 6.0)。应用程序使用JSF 1.2_11、Seam 2.1、RichFaces 3.3.1构建。

这通常发生在IE浏览器上(7,8,9)。浏览器发送一个ajax请求(RichFaces为此生成JavaScript代码)。这个HTTPPOST请求通过mod_jk转换为AJP Header和body数据包,并发送到Tomcat。头包表示内容长度为1760,但正文包的长度字段为0,没有内容。数据包是用tcpdump捕获的。并不是每个有问题的请求都会出现0 ajp正文数据包。所有ajax请求/响应都很小,最高可达30K,没有文件上传,也没有冗长的数据库查询。

在这个阶段,mod_jk日志显示请求在2分钟内得到处理。在我们的测试环境中,我们还有2、3、4和6分钟的时间。包装请求的应用程序过滤器也显示2分钟的时间;过滤器很简单——在请求前后获取时间戳,并记录差异。

应用程序的JSF阶段侦听器被调用,每个阶段(请求、视图恢复、验证、调用、渲染)的顺序为100ms,这对于应用程序来说是常见的。因此,超时必须发生在请求的开始(在过滤器之后和第一个JSF阶段之前)或结束(在呈现JSF阶段之后和过滤器结束之前)之间。

有时,mod_jk表示客户端读取超时;谁是客户端浏览器,apache?在DEBUG级别的JBoss中没有异常记录。

有人遇到类似的东西吗?mod_jk reply_timeout设置无法解决此问题。直接连接到JBoss会给我们大约30秒的超时,这是我们以前从未见过的,我们也不知道这是否与2分钟的超时有关。

我们在IE中遇到了这个问题:http://support.microsoft.com/kb/821814.我们的KeepAliveTimeout设置为3s,来自服务器的响应有时会出现在该边界上,导致Apache在发送响应标头后断开连接。

我们的解决方案是双重基础设施:外部客户端不需要SSO登录,因此无法获得KeepAlive。Intranet客户端现在转到不同的Apache服务器(因为KeepAlive是服务器范围的,而不是vhost-specific)。

我们遇到了同样/类似的问题。我们注意到正好是5分钟。我们使用的是Tomcat 6/Apache AJP/Richfaces 3.3.3 Final。

我能够在apache上修改httpd.conf以获得一些满足。

超时时间从5分钟改为4分钟,这导致"超时"从5分钟变为4分钟。所以我怀疑我走在了正确的轨道上。

接下来,我将httpd.conf MaxKeepAliveRequests从默认值100修改为200,它大大减少了"4分钟暂停"事件的数量。

编辑:

KeepAliveTimeout从10秒增加到40秒MaxKeepAliveRequests设置为0(无限制)

这似乎消除了我们的问题。显然,这些设置需要根据您服务器的流量类型/数量进行设置,但这对我们来说是有效的

最新更新