ColdFusion10サーバーの404ハンドラーページで奇妙な断続的な問題が発生しています。これが裏話です:
何年もの間、2台の負荷分散されたColdFusion8サーバーを問題なく実行してきました。
ColdFusion 10のアップグレードをソフトローンチするために、これら2つのサーバーの1つをColdFusion10にアップグレードしました。
CF10サーバーにUpdate8をインストールし、コネクタを削除して再度追加しました。
両方のサーバーでWindows2008R2が実行されています。
404ページで接続リセットの問題が発生する問題について述べているフォーラムの投稿をいくつか読んだことがありますが、その特定の問題は見られません。私が見ているのは、FusionReactorで404.cfmファイルのスレッドがハングしていることです。これらのハングしたスレッドの1つから取得したスタックトレースの例を次に示します。
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にアップグレードしてから、少なくとも1日に1回は実行する必要がありました。
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)
クロージングとフィニッシュについてはたくさんのことがありますが、それに続くステップにはより多くの読み取りと応答があります。したがって、ここで何が起こっているのかはわかりませんが、ColdFusion10の移行の完了が確実に停滞しています。これらのハングしたスレッドの原因を正確に発見する必要があります。