我的ColdFusion 10服务器上的404处理程序页面出现间歇性奇怪的问题。这是背景故事:
我们一直在运行2台负载平衡的ColdFusion 8服务器,而且使用年龄没有问题。
我们已将这两个服务器之一升级到ColdFusion 10,以便软启动我们的ColdFusion 10升级。
我已经在CF10服务器上安装了Update 8,并且已删除并重新添加了连接器。
两台服务器都运行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迁移的完成停滞了。我需要确切地找出导致这些挂起线程的原因。
您遇到的是我在一月份遇到的同一错误。我已将错误记录在Adobe的错误库中:
https://bugbase.adobe.com/index.cfm?event=bug&id=3494728
他们的工程团队已经确认了该问题,但没有实际修复的预计到达时间。CF10中用于IIS的Adobe用于IIS的连接器对我们来说很麻烦。您可以设置超时来杀死这些挂起的线程,如我的解决方法中所述,这至少使您不必每天重新启动服务器。祝好运!