2013-03-04 95 views
3

我在ColdFusion 10服務器上404處理程序頁面出現了一個奇怪的間歇性問題。這裏的背景故事:404 Handler掛在ColdFusion 10上,在ColdFusion上完美工作8

  1. 我們一直在運行2個負載平衡的ColdFusion 8服務器的年齡沒有問題。

  2. 我們已將這兩臺服務器中的一臺升級到ColdFusion 10,以便軟啓動我們的ColdFusion 10升級。

  3. 我已經在CF10服務器上安裝了更新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之外,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遷移。我需要發現究竟是什麼導致這些掛起的線程。

+0

如果直接點擊404頁面會發生什麼? – rip747 2013-03-05 13:20:32

+0

我從來沒有見過自己的問題,它總是爲我呈現。我們每天都會通過糟糕的機器人點擊100秒/ 1000次,但每天只會看到一兩個掛起的線程,而且它始終在404.cfm上。 – 2013-03-05 14:53:19

回答

1

你遇到的是我在1月遇到的同樣的錯誤。我記錄的錯誤在Adobe的bugbase:

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

他們的工程團隊已經承認這個問題,但在實際修復不ETA。 Adobe的CF10連接器對於我們來說相當麻煩。您可以設置一個超時時間來終止我的解決方法中列出的這些掛起的線程,這將至少讓您不必每天重新啓動服務器。祝你好運!

+0

完美。我已將我的投票添加到該錯誤,並將其標記爲答案。感謝那。 – 2013-03-06 19:41:24