我的團隊在五臺獨立的服務器上運行ColdFusion(v9)。其中三個是負載平衡路由器,另外兩個是開發和測試機器。ColdFusion - 丟失的類文件= JRun錯誤
幾個月前,我們開始遇到某些頁面/模板請求失敗的問題。當我說失敗時,我的意思是服務器會返回500錯誤。但是,錯誤而不是通過cftry/cfcatch和cferror觸發我們的ColdFusion異常處理。
檢查HTTP頭後,它看起來像某種jrun錯誤,所以我進入異常日誌。下面是一個錯誤的例子(這個今天上午發生):
"Error","jrpp-1","07/30/12","06:30:02",,"(class: cfezReporting2ecfc400556386, method: runPage signature:()Ljava/lang/Object;) Incompatible object argument for function call The specific sequence of files included or processed is: X:\docs\ezBuilder\index.cfm'' "
java.lang.VerifyError: (class: cfezReporting2ecfc400556386, method: runPage signature:()Ljava/lang/Object;) Incompatible object argument for function call
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)
at coldfusion.runtime.TemplateClassLoader.newInstance(TemplateClassLoader.java:552)
at coldfusion.runtime.TemplateClassLoader.newInstance(TemplateClassLoader.java:523)
at coldfusion.runtime.TemplateProxyFactory.getCFCInstance(TemplateProxyFactory.java:270)
at coldfusion.runtime.TemplateProxyFactory.resolveName(TemplateProxyFactory.java:173)
at coldfusion.runtime.TemplateProxyFactory.resolveName(TemplateProxyFactory.java:158)
at coldfusion.runtime.TemplateProxyFactory.resolveName(TemplateProxyFactory.java:148)
at coldfusion.cfc.ComponentProxyFactory.getProxy(ComponentProxyFactory.java:62)
at coldfusion.tagext.lang.InvokeTag.doEndTag(InvokeTag.java:373)
at cfezBuilder2ecfc293785079$funcCREATE_UVN._factor7(X:\docs\ezBuilder\components\ezBuilder.cfc:376)
at cfezBuilder2ecfc293785079$funcCREATE_UVN.runFunction(X:\docs\ezBuilder\components\ezBuilder.cfc:327)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:405)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:517)
at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2547)
at coldfusion.tagext.lang.InvokeTag.doEndTag(InvokeTag.java:460)
一次在模板時發生這個錯誤,它會不斷髮生,即它不是零星的,沒有「自我修復」。
另一個有趣的事情是,這個錯誤似乎發生在同一個文件上的所有服務器上。同時,我的意思是當我們收到有人發現錯誤的通知時,我們測試了其他服務器並發現它們也出錯。
無法在任何地方找到有關此特定錯誤詳細信息的幫助,我猜測ColdFusion無法找到模板或類文件。我檢查了每臺服務器和.cfc文件(還有,'找不到模板'的異常總是不一樣)。
因此,我對文件(上例中的ezReporting.cfc)進行了更改,並將其複製到所有服務器,並且看它工作正常。這個改變只是簡單地添加,然後刪除一個空格 - 我猜,基本上是強制模板重新編譯。每次發生錯誤時,我都會在接下來的幾周內每次都這樣做。它總是在.cfc文件上。
下一次發生錯誤,大約一週後,它在完全相同的文件上。這一次,我清除了服務器上的模板緩存,而不是實際更改模板。它再次運作。
從那以後,在幾個不同的文件(CFC和CFM文件)上出現同樣的錯誤。 (a)文件的「年齡」/最後更新日期 - 從一天到一年的所有內容,(b)文件的內容 - 從簡單塊到SQL查詢到一些基本設置/循環,或(c)文件的名稱。
今天早上,它發生在另一個文件上,我知道兩天前在所有服務器上都工作過。自去年以來,CFC文件內容在任何服務器上都沒有被觸及。而且,當我去到所有五臺服務器時,完全相同的文件都失敗了。當我清除模板緩存時,每臺服務器都再次開始工作。
我正在給所有這些無聊的細節,因爲我正在尋找任何可以幫助的東西。也許文件本身會出現某種失效,這就可以解釋爲什麼文件在同一時間在所有服務器上過期 - 我們在開發服務器上對其進行更改,然後將其移出到測試和生產服務器上一個簡單的複製/粘貼。但是,似乎沒有任何韻律或期限的理由,因爲如上所述,所討論的文件具有不同的年齡。
我試着在Adobe論壇上得到關於這個特殊的異常/轉儲的幫助,但還沒有找到遇到同樣事情的人。
其他人有什麼想法嗎?這個錯誤困擾着我,因爲它不會觸發我們的正常異常處理,因此我們不需要人爲干預就可以做很多事情。感謝您的任何具體指導。
所以當接下來發生這種情況時,請查看您的cfclasses文件夾。 cfezReporting2ecfc400556386.class)或下次調用的任何文件系統中有最近修改過的日期嗎?另外,你的羣集設置是什麼?你有沒有開啓粘性會議?你有開啓會話複製嗎?是被調用的對象在像服務器,應用程序或會話這樣的長時間範圍內保存嗎? – barnyr 2012-07-30 14:46:11
感謝您澄清問題。 我將在下次發生時檢查類文件的存在。沒有真正的聚類;這些實例彼此分開,並且我們不使用粘性會話會話複製。此外,到目前爲止調用的'missing'對象是簡單的cfincluded cfm文件或通過cfinvoke從調用模板調用的靜態CFC。這些情況下沒有涉及服務器/應用程序/會話範圍的CFC。 – Chris 2012-07-30 18:15:13
我記得今天早上我在這個狀態下離開了一個測試服務器,以防萬一。有問題的類文件的日期爲2012年3月1日(cfc自2011年以來未更新)。當我清除模板緩存時,類文件收到今天的日期。 – Chris 2012-07-30 18:30:27