Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 如何防止CXF客户端服务陷入死板状态?_Multithreading_Cxf_Deadlock - Fatal编程技术网

Multithreading 如何防止CXF客户端服务陷入死板状态?

Multithreading 如何防止CXF客户端服务陷入死板状态?,multithreading,cxf,deadlock,Multithreading,Cxf,Deadlock,我正在处理CXF客户机服务,但负载测试(1000个并发用户)会导致大量线程锁定和JVM崩溃。线程似乎锁定在Jaxb类AccessorInjector上: com/sun/xml/bind/v2/runtime/reflect/opt/AccessorInjector@341F3D78/341F3D84 我的客户机是一个由servlet调用的单例。客户端调用Web服务的方式如下: HttpServlet: SRecherche srech = SRecherche .getInstance();

我正在处理CXF客户机服务,但负载测试(1000个并发用户)会导致大量线程锁定和JVM崩溃。线程似乎锁定在Jaxb类AccessorInjector上:

com/sun/xml/bind/v2/runtime/reflect/opt/AccessorInjector@341F3D78/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(...);
.
.
}
我正在研究WebLogic9.2/Java5.0/CXF2.5

你知道有多少客户端同时调用会导致线程锁定吗

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
谢谢,
Simon

简单地看一下,因为您几乎都是手工操作(即处理所有连接等),所以我唯一建议的是在公共字符串recherche(字符串参数,字符串retour[])实现中启动threqad

将所有代码包装在匿名可运行或线程实例中,然后启动它。线程将处理对客户端的所有处理和响应,让recherche()方法可以自由地进行另一个调用

只是一个想法


同样以供参考的方式,您上面描述的客户机实际上是Servlet,因为它正在调用服务。或者换句话说,看起来Servlet是使用者,singleton是提供者。

简单地看一下,因为您几乎都是手动操作(即处理所有连接等),所以我唯一建议的是在公共字符串recherche中启动threqad(字符串参数,字符串返回[])实现

将所有代码包装在匿名可运行实例或线程实例中并启动它。该线程将处理所有处理和对客户端的响应,让recherche()方法自由地进行另一次调用

只是一个想法


同样以供参考的方式,您上面描述的客户机实际上是Servlet,因为它正在调用服务。或者换句话说,看起来Servlet是使用者,singleton是提供者。

没有书面回答。没有代码,没有CXF版本,什么都没有。您可能会在CXF用户列表上获得更好的帮助。Not按书面说明负责。没有代码,没有CXF版本,什么都没有。您可能会在CXF用户列表上获得更好的帮助。