【问题标题】:404 Handler Hanging on ColdFusion 10, works perfect on ColdFusion 8404 处理程序挂在 ColdFusion 10 上,在 ColdFusion 8 上完美运行
【发布时间】:2013-03-04 13:15:54
【问题描述】:

我的 ColdFusion 10 服务器上的 404 处理程序页面出现了一个奇怪的间歇性问题。这是背景故事:

  1. 我们已经运行了 2 台负载平衡的 ColdFusion 8 服务器多年没有问题。

  2. 我们已将这两台服务器中的一台升级到 ColdFusion 10,以便软启动 ColdFusion 10 升级。

  3. 我已在 CF10 服务器上安装了 Update 8,并移除并重新添加了连接器。

  4. 两台服务器都运行 Windows 2008 R2。

我已经阅读了几篇论坛帖子,说明人们在 404 页面上遇到连接重置问题,但我没有看到这个特定问题。我看到的是 FusionReactor 中 404.cfm 文件的挂起线程。以下是从这些挂起线程之一获取的堆栈跟踪示例:

Thread Stack Trace
Trace Time:   07:02:14.638 04-Mar-2013
Request ID:   179934
Script Name:  http://example.com/404.cfm?404;http://example.com:80/somemissingfile
Started:      06:07:17.581 04-Mar-2013
Exec Time:    3297057ms
Memory Used:  (32%)1,669,600KB
Memory Free:  3,539,295KB
Thread ID:    0x53de (21470)
Thread Name:  ajp-bio-8012-exec-86
Priority:     5
Hashcode:     1636847260
State:        RUNNABLE

"ajp-bio-8012-exec-86" daemon prio=5 runnable

java.net.SocketInputStream.socketRead0(SocketInputStream.java:???)[Native Method]
java.net.SocketInputStream.read(SocketInputStream.java:129)
org.apache.coyote.ajp.AjpProcessor.read(AjpProcessor.java:319)
org.apache.coyote.ajp.AjpProcessor.readMessage(AjpProcessor.java:445)
org.apache.coyote.ajp.AjpProcessor.receive(AjpProcessor.java:341)
org.apache.coyote.ajp.AbstractAjpProcessor.finish(AbstractAjpProcessor.java:1032)
org.apache.coyote.ajp.AbstractAjpProcessor.action(AbstractAjpProcessor.java:386)
org.apache.coyote.Response.action(Response.java:170)
org.apache.coyote.Response.finish(Response.java:276)
org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:288)
org.apache.catalina.connector.CoyoteOutputStream.close(CoyoteOutputStream.java:108)
com.intergral.fusionreactor.plugin.amf.InterposerOutputStream.close(InterposerOutputStream.java:104)
com.intergral.fusionreactor.trackedstream.TrackedStream.close(TrackedStream.java:113)
com.intergral.fusionreactor.filter.softkill.SoftKillResponseStream.close(SoftKillResponseStream.java:146)
com.intergral.fusionreactor.filter.FusionReactorResponseWrapper.finish(FusionReactorResponseWrapper.java:192)
com.intergral.fusionreactor.core.FusionReactor.finish(FusionReactor.java:683)
com.intergral.fusionreactor.filter.FusionReactorCoreFilter.doHttpServletRequest(FusionReactorCoreFilter.java:575)
com.intergral.fusionreactor.filter.FusionReactorCoreFilter.doFusionRequest(FusionReactorCoreFilter.java:337)
com.intergral.fusionreactor.filter.FusionReactorCoreFilter.doFilter(FusionReactorCoreFilter.java:246)
com.intergral.fusionreactor.filter.FusionReactorFilter.doFilter(FusionReactorFilter.java:121)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:414)
org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:204)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
java.lang.Thread.run(Thread.java:662)

我尝试通过 FusionReactor 手动杀死这些线程,但它们不会死。清除挂起线程的唯一方法是重新启动 ColdFusion 服务(自从我升级到 ColdFusion 10 以来,我每天至少必须这样做一次。

除了运行我们的标准布局自定义标签并显示页面未找到通知之外,404 并没有做任何特别的事情。

查看线程转储,ColdFusion 似乎已经完成了处理并完成了用输出填充缓冲区,但它还没有完成发送到浏览器?

org.apache.coyote.ajp.AbstractAjpProcessor.finish(AbstractAjpProcessor.java:1032)
org.apache.coyote.ajp.AbstractAjpProcessor.action(AbstractAjpProcessor.java:386)
org.apache.coyote.Response.action(Response.java:170)
org.apache.coyote.Response.finish(Response.java:276)
org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:288)
org.apache.catalina.connector.CoyoteOutputStream.close(CoyoteOutputStream.java:108)

那里有很多关于关闭和完成的内容,但后面的步骤有更多的阅读和响应。所以我不确定这里会发生什么,但这肯定会阻碍我们的 ColdFusion 10 迁移的完成。我需要找出导致这些挂起线程的确切原因。

【问题讨论】:

  • 直接点击404页面会怎样?
  • 我自己从未见过这个问题,它总是为我呈现。我们的这些页面每天被恶意机器人访问 100 次/1000 次,但我每天只看到一两个挂起的线程,而且它总是在 404.cfm 上。

标签: tomcat coldfusion iis-7.5 coldfusion-10 fusionreactor


【解决方案1】:

您遇到的问题与我在一月份遇到的错误相同。我已在 Adob​​e 的错误库中记录了该错误:

https://bugbase.adobe.com/index.cfm?event=bug&id=3494728

他们的工程团队已经承认了这个问题,但没有实际修复的预计到达时间。 Adobe在CF10中的IIS连接器对我们来说已经相当麻烦了。您可以设置一个超时来终止这些挂起的线程,如我的解决方法中列出的那样,这至少可以让您不必每天重新启动服务器。祝你好运!

【讨论】:

  • 完美。我已将我的投票添加到错误中,并将其标记为答案。谢谢你。
猜你喜欢
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多