coldfusion requesttimeout

时间:2012-09-13 11:52:58

标签: coldfusion

我有一个执行长时间运行查询的ColdFusion模板。我已将请求超时从3600增加到6600,但我的模板继续超时。我想再次将请求超时从6600增加到9600,但在此之前我想知道是否存在因增加请求超时而存在的任何缺点或风险?

基本上,我的cfm文件的作用是什么。它必须从表中获取记录并将它们插入到Excel表中。该表包含大约30,000条记录。 cfm文件一次获取每1000条记录并将它们插入Excel,然后接下来的1000条,依此类推。为了完成整个过程,由于超时问题,它有时会突然停止。所以在我增加“requesttimeout”之前我想知道,如果我极大地增加requesttimeout,会不会有任何问题(ram使用,性能)。

3 个答案:

答案 0 :(得分:5)

在需要的时候提高超时是很好的。您应该使用cfsetting requestTimeOut =“xxx”在需要的地方启动超时,而不是在管理员中增加超时,因为这会影响所有模板。

缺点是有一个线程池来处理请求,而一个正在处理你的长期运行请求,它不可用于做其他事情。只要您确信长时间运行的请求一次只能由一两个人运行,但是如果有很多人可以运行它,那么这很好。如果CF将同时运行8个请求,并且所有8个请求都在长时间运行请求,那么您的站点实际上处于脱机状态。 CF会将请求排队到某一点,但您不希望首先进入此状态。

我曾经在应用程序中工作,这些应用程序可能需要长达一个小时的后台管理员任务,但我们相信不会有2个人会运行它们。

您还可以查看使用cfthread以便在不阻止页面的情况下运行查询,但随后向用户提供反馈更加困难。

答案 1 :(得分:1)

我认为如果我们对情况有所了解会有所帮助。这有点像夜间工作吗?或者,这是一个用户可能导航到的页面,在等待它时生成报告?给我们一些关于您的网页正在做什么的基本信息。

此外,还有不同的方法来增加请求超时;系统范围通过管理员或页面特定的<cfsetting requestTimeOut="">标签。你增加了哪一个?我建议您不要增加系统范围设置,但可以在需要时增加页面级别设置。

<cfquery>标记还有一个超时属性。你在用它吗?

您能告诉我们<cfquery>是否超时,或者在cfquery之后和数据输出期间是否发生了超时?

我还建议尝试尽可能优化您的查询。可以设置索引(如果还没有)?你真的只需要返回一部分记录吗?

也许你可以将这一页分成多个页面,每个页面运行得更快。

答案 2 :(得分:0)

而不是仅仅增加超时限制,如果发起请求的用户不需要等待结果(即结束日期或隔夜报告),那么我将使用cfthread并将其超时设置为0(永远不会超时)并让它在后台运行直到它完成,或设置一个极长的超时,如1小时。我也会使用cflock来阻止线程能够多次进行处理,否则你可能会因为许多重线而使你的系统停止运行。

阅读此-docs-并了解您的想法