2016-08-02 31 views
1

所有,的Websphere掛螺紋 - 鎖監視器上WASJSPExtensionServletWrapper

我在JSF 2.0應用接收間歇掛起線程在WebSphere 8.5.5.5:

Thread Name 
WebContainer : 8 
State 
Waiting on condition 
Monitor 
Owns Monitor Lock on com/ibm/ws/jsp/webcontainerext/ws/[email protected] 
Java Stack 
at java/lang/Thread.sleep(Native Method) 
at java/lang/Thread.sleep(Thread.java:904(Compiled Code)) 
at com/ibm/ws/webcontainer/servlet/ServletWrapper.doDestroy(ServletWrapper.java:1019(Compiled Code)) 
at com/ibm/ws/webcontainer/servlet/ServletWrapperImpl.doDestroy(ServletWrapperImpl.java:337(Compiled Code)) 
at com/ibm/ws/webcontainer/servlet/ServletWrapper.prepareForReload(ServletWrapper.java:1112(Compiled Code)) 
at com/ibm/wsspi/webcontainer/servlet/GenericServletWrapper.prepareForReload(GenericServletWrapper.java:132(Compiled Code)) 
at com/ibm/ws/jsp/webcontainerext/AbstractJSPExtensionServletWrapper._checkForTranslation(AbstractJSPExtensionServletWrapper.java:529(Compiled Code)) 
at com/ibm/ws/jsp/webcontainerext/AbstractJSPExtensionServletWrapper.checkForTranslation(AbstractJSPExtensionServletWrapper.java:294(Compiled Code)) 
at com/ibm/ws/jsp/webcontainerext/AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:163(Compiled Code)) 

WebContainer #8線程被阻塞大致72其他Web容器由於爭用其1個監視器鎖定而導致的線程。這是鎖定共享對象WASJSPExtensionServletWrapper

我假設由於上述錯誤的位置,這是發生在JSP標記翻譯期間,可能是緩慢運行的自定義標記或Rich Faces 4.3.2標記(AJAX調用a4j)導致Servlet重新加載緩慢並由於上下文切換而掛起?

在自定義標記中,由於對VariableResolver的棄用調用,我隨後更改爲ELResolver,導致偶爾出現TreeMap錯誤。而在富面臨AJAX調用我看到這個不同步代碼:

Map<String,String> data = new HashMap<String,String>(); 
data.put("customerSum", collectedBalance); 

其次是這個代碼做一個GET:

JSONObject dataToJSON = new JSONObject() 
dataToJSON.put("customerSum", data.get("customerSum")); 

不過,我有一個可怕的時間中的: (1 )通過確鑿證據證明冒煙槍是TreeMap.putHashMap.put或得到? (2)重現了這個問題?

什麼可能導致Servlet在JSP標籤_checkForTranslation之後重新加載?這可能是因爲遇到錯誤或NullPointerException或無限循環而重新加載?我在SystemOut.log中沒有看到任何清楚的內容。

因爲我改變了ElResolver,並刪除了與該HashMap的AJAX調用,我還沒有看到這個問題。但是,我需要能夠證明根本原因? (我也不會介意能否退回AJAX調用?)我也不確定這是否可能是由於大量的請求(由於AJAX調用的次數?)而導致的,而不是由於運行緩慢自定義標籤?但交通是適度的。

任何幫助或建議將不勝感激。 。 。謝謝。

PS我知道Rich Faces已經報廢,但在未來的項目中取代它需要時間。 。 。

UPDATE 8/3/2016:今天我們注意到生產服務器中的JSP頁面.class文件不斷被重新編譯和重新加載。這不是必要的,也不應該如此。研究這是否可能會設置在銷燬/重新加載JSP頁面Servlet時導致間歇性掛起線程的條件。

回答

0

至於在每個請求上重新編譯的JSP,您應該查看APAR PI12939以查看是否適用於您的環境。

http://www-01.ibm.com/support/docview.wss?uid=swg1PI12939

如果JSP的最初使用編譯一個用戶和服務器在另一個運行然後JSP容器可以有一個很難更新的.class文件的時間戳...因此導致它認爲每個請求的JSP都過時了,並嘗試重新編譯並重新編譯。還有就是可以設置爲緩解這種情況下一個JSP屬性:

要啓用此行爲,下面的JSP屬性必須 設置爲「真」: deleteClassFilesBeforeRecompile

一套,在你的應用程序的IBM- JSP屬性web-ext.xml文件。請注意,如果您要更新已安裝的應用程序,請更新嵌套在配置文件的config目錄中的ibm-web-ext.xml文件版本,而不是installedApps目錄。

另一個選項是將reloadEnabled JSP屬性設置爲false。這將阻止JSP容器持續檢查是否需要重新編譯JSP。然而,這只是掩蓋真正的問題。