2012-04-30 54 views
2

我正在使用CXF客戶端服務,但負載測試(1000個併發用戶)導致很多鎖定線程和JVM崩潰。螺紋似乎對JAXB類AccessorInjector被鎖定:如何防止CXF客戶端服務死鎖?

com/sun/xml/bind/v2/runtime/reflect/opt/[email protected]/341F3D84 

我的客戶是一家由一個servlet叫單。客戶端調用一樣,web服務:

的HttpServlet:

SRecherche srech = SRecherche .getInstance(); 
String reponse = srech.recherche(parametres, retour); 

客戶服務:

public static SRecherche getInstance() { 
     synchronized (SRecherche .class) { 
      if (instance == null) { 
       instance = new SRecherche(); 
      } 
     } 
     return instance; 
    } 

. 
. 
. 
. 

public String recherche(String parametres, String retour[]) { 

    SampleSOAPService sampleSOAPService = new SampleSOAPService(ClassLoader.getSystemResource("service.wsdl")); 
    SampleSOAP s = sampleSOAPService .getService(); 
    ((BindingProvider) s).getRequestContext().put("thread.local.request.context", "true"); 
    // set the username and password 
    ((BindingProvider) s).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username); 
    ((BindingProvider) s).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password); 
    //set timeout to be longer 
    Client client = ClientProxy.getClient(s); 
    HTTPConduit http = (HTTPConduit) client.getConduit(); 
    HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); 
    httpClientPolicy.setConnectionTimeout(timeout); 
    httpClientPolicy.setAllowChunking(false); 
    httpClientPolicy.setReceiveTimeout(timeout); 
    httpClientPolicy.setConnection(ConnectionType.CLOSE); 
    http.setClient(httpClientPolicy); 
. 
. 
. 

    s.callService(...); 
. 
. 
} 

我工作在WebLogic 9.2/Java的5.0/2.5 CXF

你對於該客戶端的同時調用的多少可能導致鎖定線程有任何想法?

JDK版本:

J2RE 5.0 IBM J9 2.3 AIX ppc-32 build j9vmap3223-20081129 

JVM參數:

-Xjcl:jclscar_23 
-Dcom.ibm.oti.vm.bootstrap.library.path=/usr/java5/jre/bin 
-Dsun.boot.library.path=/usr/java5/jre/bin 
-Djava.library.path=/usr/java5/jre/bin:/usr/java5/jre/bin:/usr/java5/jre/bin/classic:/usr/java5/jre/bin:/exec/products/weblogic/v9.2/bea/patch_weblogic921/profiles/default/native:/exec/products/weblogic/v9.2/server/native/aix/ppc:/usr/java5/jre/bin/j9vm:/usr/lib 
-Djava.home=/usr/java5/jre 
-Djava.ext.dirs=/usr/java5/jre/lib/ext 
-Duser.dir=/exec/products/weblogic/v9.2/user_projects/domains/rforce 
_j2se_j9=70912 0xF12ACF08 
vfprintf 0x300017A4 
-Xms2048m 
-Xmx2048m 
-Dcom.sun.xml.namespace.QName.useCompatibleSerialVersionUID=1.0 
-da 
-Dplatform.home=/exec/products/weblogic/v9.2 
-Dwls.home=/exec/products/weblogic/v9.2/server 
-Dwli.home=/exec/products/weblogic/v9.2/integration 
-Dweblogic.management.discover=true 
-Dwlw.iterativeDev=false 
-Dwlw.testConsole=false 
-Dwlw.logErrorsToConsole= 
-Dweblogic.ext.dirs=/exec/products/weblogic/v9.2/bea/patch_weblogic921/profiles/default/sysext_manifest_classpath 
-Dcom.wily.introscope.agentProfile=/exec/products/weblogic/introscope/wily/IntroscopeAgent_prod.profile 
-javaagent:/exec/products/weblogic/introscope/wily/Agent.jar 
-Dcom.wily.introscope.agent.agentName=RFORCE 
-Dweblogic.Name=RForceServer 
-Djava.security.policy=/exec/products/weblogic/v9.2/server/lib/weblogic.policy 
-Dinvokedviajava 
-Djava.class.path=/exec/products/weblogic/v9.2/server/lib/geronimo-ws-metadata_2.0_spec-1.1.3.jar:/exec/products/weblogic/v9.2/user_projects/domains/rforce/config/rforce/:/exec/products/weblogic/v9.2/user_projects/domains/rforce/config/rforce/wsdl/drakkar/:/usr/java5/lib/tools.jar:/exec/products/weblogic/v9.2/server/lib/weblogic_sp.jar:/exec/products/weblogic/v9.2/server/lib/weblogic.jar:/exec/products/weblogic/v9.2/server/lib/webservices.jar::/exec/products/weblogic/v9.2/common/eval/pointbase/lib/pbclient51.jar:/exec/products/weblogic/v9.2/server/lib/xqrl.jar:: 
vfprintf 
_port_library 0xF12AC748 
-Xdump 

感謝, 西蒙

+0

不能按照書面承擔責任。沒有代碼,沒有CXF版本,沒有任何東西。您可能會在CXF用戶列表中獲得更好的幫助。 – bmargulies

回答

0

剛剛從快速瀏覽,因爲你是手工做的幾乎一切(即處理所有連接等)關於我可以推薦的唯一的事情就是在你的公共字符串recherche中啓動一個threqad(String parametres,String retour [])實現。

將您擁有的所有代碼封裝在匿名runnable或Thread實例中,並將其啓動。線程將處理所有的處理和對客戶端的響應,使recherche()方法免費接受另一個調用。

只是一個想法。

同樣以FYI的方式,上面描述的客戶端實際上就是Servlet,因爲它正在調用服務。或者換句話說,它看起來像Servlet是消費者,單身人士是提供者。