【问题标题】:Intermittent Problems With cfthreadcfthread 的间歇性问题
【发布时间】:2014-01-20 19:47:57
【问题描述】:

我找到了this bug report。问题是,“这就是发生在我身上的事情吗?”。

我有几种情况会做这种事情。

<cfthread name="thread1" action="run">
code for thread1
</cfthread>

<cfthread name="thread2" action="run">
code for thread2
</cfthread>

下一个将有一个真实的名字。

<cfthread name="CIMSThread" action="run">
code for CIMSThread
</cfthread>

<cfthread name="thread1,thread2,CIMSThread" action="join"></cfthread>

每隔一段时间,我就会遇到这类异常。

"Error","cfthread-638","04/10/13","15:14:14",,"CIMSTHREAD: null"
"Error","jrpp-1215","04/10/13","15:14:22","DWQueries","Error Executing Database 
Query.<br><b>Query Of Queries runtime error.</b><br>  
Table named CIMSThread.CIMSData was not found in memory.  etc"

当它第一次发生时,我再次运行了适用的报告,并在不同的 thead 上得到了相同类型的错误,最终让它成功运行而无需更改任何代码或数据。

当它第一次发生时,我还认为线程中可能发生了一些不好的事情会导致它崩溃,所以我做了一些事情来强制它发生。但是,当我检查异常日志时,该线程中的错误出现了。在这些情况下,异常日志会显示这篇文章中的内容。

我们正在运行版本 9,0,1,274733 并已开启监控。

我是否受到报告的错误的影响,或者这可能是其他原因?

回复评论

我无法随意重现该问题。在与我的管理员协商后,我们关闭了监控,但这些页面并没有经常运行。如果错误暂时没有出现,那也不一定能证明什么。

有问题的线程包含长时间运行的查询。我刚刚想到的是,有一个非常常用的页面从未引起过问题。好页面和问题页面之间有两个区别。好的页面只运行了两个线程并将它们连接起来。问题页面运行两个以上。此外,好页面上的查询执行时间也不长。

对于那些建议超时的人来说,这不是

这是一些代码。查询运行大约需要 4 秒。

<cfthread name="ThreadWithTimeOut" action="run">
<cfquery name="thread.x" datasource="dw" timeout="1">
sql deleted
</cfquery>
</cfthread>
<cfthread action="join" name="ThreadWithTimeOut"></cfthread>
<cfdump var="#ThreadWithTimeOut.x#" metainfo="no">

异常日志显示如下:

"Error","cfthread-6","04/16/13","14:19:15",,"THREADWITHTIMEOUT: 
Error Executing Database Query. ** 
Error ** (11319) [Red Brick Warehouse JDBC Driver] : 
Query timeout (1 seconds) has expired."
coldfusion.tagext.sql.QueryTag$DatabaseQueryException: Error Executing Database Query.

还有这个:

"Error","jrpp-238","04/16/13","14:19:15","Dan",
"Element X is undefined in THREADWITHTIMEOUT.

这是一组不同的例外。前面的说线程是空的。

【问题讨论】:

  • 看起来确实很相似。你能随意制造问题吗?如果是这样,当您关闭监控时它会消失吗?
  • 很难评论,丹,没有看到你在线程代码中对那个变量做了什么。我无法复制你提到的那个错误。
  • Dan,我之前没有真正使用过cfthread,所以不太熟悉。您说您的查询需要一段时间才能运行。也许有时查询实际上超时,导致查询结果不可用。你能从cfthread 代码中得到cfdump 的错误结构吗?我想您需要将其写入文件,因为没有输出缓冲区。 cfdump 标签有一个属性可以为你做这件事。请参阅“输出”属性。如果您可以转储整个错误结构,它可能会为您指明正确的方向。
  • Dan,你还没有分享实际的代码,所以我们在这里做一些假设。您的加入通话是否设置了超时或无限期等待?如果前面的线程失败/错误,下一个线程是否会尝试处理?您的 CIMSThread 是否试图从其他线程中引用某些内容?

标签: coldfusion timeout cfthread


【解决方案1】:

更仔细地查看错误:

"Error","cfthread-638","04/10/13","15:14:14",,"CIMSTHREAD: null"
"Error","jrpp-1215","04/10/13","15:14:22","DWQueries","Error Executing Database 
Query.<br><b>Query Of Queries runtime error.</b><br>  
Table named CIMSThread.CIMSData was not found in memory.  etc"

从那个错误我只能假设(因为你没有在你的问题中提供 any 实际代码)CIMSTHREAD 中的代码引发了一个错误,导致线程崩溃并且不返回任何数据。

同样从错误(和您的问题)中,我可以推断出您的线程正在查询数据库并将其传回。

现在我个人不知道为什么您要使用线程来查询您的数据库。如果您因为查询需要一段时间来执行而需要求助于它,那么我的朋友,您会遇到更大的问题。我会将针对数据库运行的查询放在附加到数据库本身的 ide 中。看看您是否需要添加索引或以某种方式使用查询,以便它更快地返回。

底线...我认为您的问题不是 cfthread 问题,而是您的查询的超时问题。

【讨论】:

  • 感谢您的回答,但事实并非如此。如果线程中有错误,它将出现在异常日志中,如我的帖子中所述。
猜你喜欢
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
相关资源
最近更新 更多