11 Replies Latest reply on Jun 19, 2009 1:15 PM by peterj

    JBOSS Client pooling conections problem, concurrent access.

    mnenchev

      Hi, all i am trying to do some performance test for my project. I use apache httpclient 4.0. to do http requests to my tomcat server, that talks to jboss ejbs.
      Here what i am trying to do:
      Start 50 threads(users) simulteniously. Each thread firs send http request for cookie creating and get the cookie from the response, after that use it to send login request. And after that X times send request for some business transaction.
      But for some reason jboss could not process all logins. Here is the log from my tomcat: I googled about that, and it seems that this is jboss configuration problem with the maxclientpoolsize, i increased it(3000 connections in the jboss/server/all/deploy/ejb3.deployer/META-INF/jboss-service.xml ) but the situation is the same.
      I also increased other connection pools for my application(monitored them from jmx console), no effect. Am i missing something?
      I use jboss 4.2 under linux and tomcat 6.
      Is there any other way to test the above scenario? I want to see how many transactions could be done per sec(min).

      EXCEPTOIN: Can not get connection to server. Problem establishing socket connection for InvokerLocator [socket://127.0.0.1:3873/]
      
       Can not get connection to server. Problem establishing socket connection for InvokerLocator [socket://127.0.0.1:3873/]
      org.jboss.remoting.CannotConnectException: Can not get connection to server. Problem establishing socket connection for InvokerLocator [socket://127.0.0.1:3873/]
       at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:530)
       at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
       at org.jboss.remoting.Client.invoke(Client.java:1550)
       at org.jboss.remoting.Client.invoke(Client.java:530)
       at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:72)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:103
      
      .................
      
      Caused by: java.net.SocketException: Can not obtain client socket connection from pool. Have waited 30001 milliseconds for available connection (51in use)
       at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.getConnection(MicroSocketClientInvoker.java:848)
       at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:526)
       at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
       at org.jboss.remoting.Client.invoke(Client.java:1550)
       at org.jboss.remoting.Client.invoke(Client.java:530)
       at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
      
      
      
      


        • 1. Re: JBOSS Client pooling conections problem, concurrent acce
          mnenchev

          How could i increase the connection size it is 51, but why?!?

          • 2. Re: JBOSS Client pooling conections problem, concurrent acce
            peterj

            First, are you running the 'all' configuration?

            Second, could you post the full description for the mbeans that you changed in jboss-service.xml file you changed?

            When posting XML text or source code, please enclose the text in UBBCode "code" tags - you can do this by selecting the text and clicking the Code button above the editor window. Also, click the Preview button to ensure that the formatting is correct and the XML text shows up before posting.

            • 3. Re: JBOSS Client pooling conections problem, concurrent acce
              peterj

              Oh, and what tool are you using to run the tests? If you have only 50 client threads running, 50 server threads should be sufficient. Perhaps the client is not closing connections properly.

              • 4. Re: JBOSS Client pooling conections problem, concurrent acce
                mnenchev

                 

                "PeterJ" wrote:
                Oh, and what tool are you using to run the tests? If you have only 50 client threads running, 50 server threads should be sufficient. Perhaps the client is not closing connections properly.



                Hi, yes i am running in all configuration.
                The client side is java se application that use httpclient 4.0 to create, send requests and process responces. I worked before with that lib and it was ok, i think the resources are properly freed. The only thing i have to do is:
                if (entity != null) {
                 // this reads the response stream and frees the underlying socket
                 entity.consumeContent();
                }
                

                jboss 4.2.1
                jboss/server/all/conf/jboss-service.xml:
                <?xml version="1.0" encoding="UTF-8"?>
                
                <!-- $Id: jboss-service.xml 62434 2007-04-19 21:22:50Z dimitris@jboss.org $ -->
                
                <!-- ===================================================================== -->
                <!-- JBoss Server Configuration -->
                <!-- ===================================================================== -->
                
                <server>
                
                 <!-- Load all jars from the JBOSS_DIST/server/<config>/lib directory. This
                 can be restricted to specific jars by specifying them in the archives
                 attribute.
                 -->
                 <classpath codebase="${jboss.server.lib.url:lib}" archives="*"/>
                
                 <!-- ==================================================================== -->
                 <!-- JSR-77 Single JBoss Server Management Domain -->
                 <!-- ==================================================================== -->
                 <mbean code="org.jboss.management.j2ee.LocalJBossServerDomain"
                 name="jboss.management.local:j2eeType=J2EEDomain,name=Manager">
                 <attribute name="MainDeployer">jboss.system:service=MainDeployer</attribute>
                 <attribute name="SARDeployer">jboss.system:service=ServiceDeployer</attribute>
                 <attribute name="EARDeployer">jboss.j2ee:service=EARDeployer</attribute>
                 <attribute name="EJBDeployer">jboss.ejb:service=EJBDeployer</attribute>
                 <attribute name="RARDeployer">jboss.jca:service=RARDeployer</attribute>
                 <attribute name="CMDeployer">jboss.jca:service=ConnectionFactoryDeployer</attribute>
                 <attribute name="WARDeployer">jboss.web:service=WebServer</attribute>
                 <attribute name="CARDeployer">jboss.j2ee:service=ClientDeployer</attribute>
                 <attribute name="MailService">jboss:service=Mail</attribute>
                 <attribute name="JMSService">jboss.mq:service=DestinationManager</attribute>
                 <attribute name="JNDIService">jboss:service=Naming</attribute>
                 <attribute name="JTAService">jboss:service=TransactionManager</attribute>
                 <attribute name="UserTransactionService">jboss:service=ClientUserTransaction</attribute>
                 <attribute name="RMI_IIOPService">jboss:service=CorbaORB</attribute>
                 </mbean>
                
                 <!-- ==================================================================== -->
                 <!-- XMBean Persistence -->
                 <!-- ==================================================================== -->
                 <mbean code="org.jboss.system.pm.AttributePersistenceService"
                 name="jboss:service=AttributePersistenceService"
                 xmbean-dd="resource:xmdesc/AttributePersistenceService-xmbean.xml">
                 <!-- the AttributePersistenceService is persistent, itself -->
                
                 <!--
                 <attribute name="AttributePersistenceManagerClass">org.jboss.system.pm.XMLAttributePersistenceManager</attribute>
                 <attribute name="AttributePersistenceManagerConfig">
                 <data-directory>data/xmbean-attrs</data-directory>
                 </attribute>
                 <attribute name="ApmDestroyOnServiceStop">false</attribute>
                 <attribute name="VersionTag"></attribute>
                 -->
                 </mbean>
                
                 <!-- ==================================================================== -->
                 <!-- Thread Pool -->
                 <!-- ==================================================================== -->
                
                 <!-- A Thread pool service -->
                 <mbean code="org.jboss.util.threadpool.BasicThreadPool"
                 name="jboss.system:service=ThreadPool">
                 <attribute name="Name">JBoss System Threads</attribute>
                 <attribute name="ThreadGroupName">System Threads</attribute>
                 <!-- How long a thread will live without any tasks in MS -->
                 <attribute name="KeepAliveTime">60000</attribute>
                 <!-- The max number of threads in the pool -->
                 <attribute name="MaximumPoolSize">1000</attribute>
                 <!-- The max number of tasks before the queue is full -->
                 <attribute name="MaximumQueueSize">1000</attribute>
                 <!-- The behavior of the pool when a task is added and the queue is full.
                 abort - a RuntimeException is thrown
                 run - the calling thread executes the task
                 wait - the calling thread blocks until the queue has room
                 discard - the task is silently discarded without being run
                 discardOldest - check to see if a task is about to complete and enque
                 the new task if possible, else run the task in the calling thread
                 -->
                 <attribute name="BlockingMode">run</attribute>
                 </mbean>
                
                 <!-- Preload all custom editors for VMs that don't use the thread
                 context class loader when searching for PropertyEditors. Uncomment
                 if your JDK 1.3.0 VM fails to find JBoss PropertyEditors.
                 <mbean code="org.jboss.varia.property.PropertyEditorManagerService"
                 name="jboss:type=Service,name=BootstrapEditors">
                 <attribute name="BootstrapEditors">
                 java.math.BigDecimal=org.jboss.util.propertyeditor.BigDecimalEditor
                 java.lang.Boolean=org.jboss.util.propertyeditor.BooleanEditor
                 java.lang.Class=org.jboss.util.propertyeditor.ClassEditor
                 java.util.Date=org.jboss.util.propertyeditor.DateEditor
                 java.io.File=org.jboss.util.propertyeditor.FileEditor
                 java.net.InetAddress=org.jboss.util.propertyeditor.InetAddressEditor
                 java.lang.Integer=org.jboss.util.propertyeditor.IntegerEditor
                 javax.management.ObjectName=org.jboss.mx.util.propertyeditor.ObjectNameEditor
                 java.util.Properties=org.jboss.util.propertyeditor.PropertiesEditor
                 [Ljava.lang.String;=org.jboss.util.propertyeditor.StringArrayEditor
                 java.net.URL=org.jboss.util.propertyeditor.URLEditor
                 </attribute>
                 </mbean>
                 -->
                
                 <!-- ==================================================================== -->
                 <!-- Log4j Initialization -->
                 <!-- ==================================================================== -->
                
                 <mbean code="org.jboss.logging.Log4jService"
                 name="jboss.system:type=Log4jService,service=Logging"
                 xmbean-dd="resource:xmdesc/Log4jService-xmbean.xml">
                 <attribute name="ConfigurationURL">resource:jboss-log4j.xml</attribute>
                 <!-- Set the org.apache.log4j.helpers.LogLog.setQuiteMode. As of log4j1.2.8
                 this needs to be set to avoid a possible deadlock on exception at the
                 appender level. See bug#696819.
                 -->
                 <attribute name="Log4jQuietMode">true</attribute>
                 <!-- How frequently in seconds the ConfigurationURL is checked for changes -->
                 <attribute name="RefreshPeriod">60</attribute>
                 </mbean>
                
                 <!-- ==================================================================== -->
                 <!-- Active Alarm Table -->
                 <!-- ==================================================================== -->
                
                 <!--
                 | The ActiveAlarmTable service is a simple JMX notification listener
                 | that maintains a table with the received notifications (alarms).
                 | The alarms can be acknowledged through the jmx or the web console.
                 | Modify the SubscriptionList below to subscribe for any notification
                 | in the system and treat it as an alarm.
                 | The JMXNotificationAppender is a log4j Appender that can be configured
                 | in log4j.xml, that trasforms logging events to JMX notification so they
                 | can be fed back into the table. By storing the WARN or higher level logging
                 | events you can have a quick view of important system faults.
                 |
                 | The following attributes may be set:
                 |
                 | MaxTableSize (default 1000)
                 | - set an upper limit to the number of stored alarms
                 | LogLevel (default DEBUG)
                 | - the log level to use for received notification, can be set to NONE
                 | ServerId (default jboss)
                 | - used to construct unique alarm ids
                 | SubscriptionList
                 | - subscribe for the notifications to be stored in the table
                
                 <mbean code="org.jboss.monitor.services.ActiveAlarmTable"
                 name="jboss.monitor:service=ActiveAlarmTable">
                 <attribute name="SubscriptionList">
                 <subscription-list>
                 <mbean name="jboss.monitor:*">
                 <notification type="jboss.alarm"/>
                 <notification type="JBOSS_MONITOR_NOTIFICATION"/>
                 </mbean>
                 <mbean name="jboss.system:service=Logging,type=JMXNotificationAppender"/>
                 </subscription-list>
                 </attribute>
                 </mbean>
                 -->
                
                 <!-- ==================================================================== -->
                 <!-- JBoss RMI Classloader - only install when available -->
                 <!-- ==================================================================== -->
                 <mbean code="org.jboss.util.property.jmx.SystemPropertyClassValue"
                 name="jboss.rmi:type=RMIClassLoader">
                 <attribute name="Property">java.rmi.server.RMIClassLoaderSpi</attribute>
                 <attribute name="ClassName">org.jboss.system.JBossRMIClassLoader</attribute>
                 </mbean>
                
                 <!-- ==================================================================== -->
                 <!-- Service Binding -->
                 <!-- ==================================================================== -->
                
                 <!-- Automatically activated when generatting the clustering environment -->
                 <!-- @TESTSUITE_CLUSTER_CONFIG@ -->
                
                 <!--
                 | Binding service manager for port/host mapping. This is a sample
                 | config that demonstrates a JBoss instances with a server name 'ports-01'
                 | loading its bindings from an XML file using the ServicesStoreFactory
                 | implementation returned by the XMLServicesStoreFactory.
                 |
                 | ServerName: The unique name assigned to a JBoss server instance for
                 | lookup purposes. This allows a single ServicesStore to handle mulitiple
                 | JBoss servers.
                 |
                 | StoreURL: The URL string passed to org.jboss.services.binding.ServicesStore
                 | during initialization that specifies how to connect to the bindings store.
                 | StoreFactory: The org.jboss.services.binding.ServicesStoreFactory interface
                 | implementation to create to obtain the ServicesStore instance.
                
                 <mbean code="org.jboss.services.binding.ServiceBindingManager"
                 name="jboss.system:service=ServiceBindingManager">
                 <attribute name="ServerName">ports-01</attribute>
                 <attribute name="StoreURL">${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xml</attribute>
                 <attribute name="StoreFactoryClassName">
                 org.jboss.services.binding.XMLServicesStoreFactory
                 </attribute>
                 </mbean>
                 -->
                
                 <!-- ==================================================================== -->
                 <!-- Class Loading -->
                 <!-- ==================================================================== -->
                
                 <!-- A mini webserver used for dynamic and class and resource loading -->
                 <mbean code="org.jboss.web.WebService"
                 name="jboss:service=WebService">
                 <!-- The Bind address and Port -->
                 <attribute name="BindAddress">${jboss.bind.address}</attribute>
                 <attribute name="Port">8083</attribute>
                 <!-- The address to use for the host portion of the RMI codebase URL -->
                 <attribute name="Host">${java.rmi.server.hostname}</attribute>
                 <!-- Should non-EJB .class files be downloadable -->
                 <attribute name="DownloadServerClasses">true</attribute>
                 <!-- Should resources other than .class files be downloadable. Both
                 DownloadServerClasses and DownloadResources must be true for resources
                 to be downloadable. This is false by default because its generally a
                 bad idea as server configuration files that container security
                 information can be accessed.
                 -->
                 <attribute name="DownloadResources">false</attribute>
                
                 <!-- Use the default thread pool for dynamic class loading -->
                 <depends optional-attribute-name="ThreadPool"
                 proxy-type="attribute">jboss.system:service=ThreadPool</depends>
                 </mbean>
                
                 <!-- ==================================================================== -->
                 <!-- JNDI -->
                 <!-- ==================================================================== -->
                
                 <!-- A simple mbean wrapper around the jndi Naming object. This
                 only handles an in memory instance. The NamingService uses this
                 as the JNDI store and exposes it remotely.
                 -->
                 <mbean code="org.jnp.server.NamingBeanImpl"
                 name="jboss:service=NamingBeanImpl"
                 xmbean-dd="resource:xmdesc/NamingBean-xmbean.xml">
                 </mbean>
                
                 <mbean code="org.jboss.naming.NamingService"
                 name="jboss:service=Naming"
                 xmbean-dd="resource:xmdesc/NamingService-xmbean.xml">
                 <!-- The call by value mode. true if all lookups are unmarshalled using
                 the caller's TCL, false if in VM lookups return the value by reference.
                 -->
                 <attribute name="CallByValue">false</attribute>
                 <!-- The listening port for the bootstrap JNP service. Set this to -1
                 to run the NamingService without the JNP invoker listening port.
                 -->
                 <attribute name="Port">1099</attribute>
                 <!-- The bootstrap JNP server bind address. This also sets the default
                 RMI service bind address. Empty == all addresses
                 -->
                 <attribute name="BindAddress">${jboss.bind.address}</attribute>
                 <!-- The port of the RMI naming service, 0 == anonymous -->
                 <attribute name="RmiPort">1098</attribute>
                 <!-- The RMI service bind address. Empty == all addresses
                 -->
                 <attribute name="RmiBindAddress">${jboss.bind.address}</attribute>
                 <!-- The thread pool service used to control the bootstrap lookups -->
                 <depends optional-attribute-name="LookupPool"
                 proxy-type="attribute">jboss.system:service=ThreadPool</depends>
                 <!-- An example of using the unifed invoker as the transport.
                 <depends optional-attribute-name="InvokerProxyFactory"
                 proxy-type="attribute">jboss:service=proxyFactory,type=unified,target=Naming</depends>
                 -->
                 <depends optional-attribute-name="Naming"
                 proxy-type="attribute">jboss:service=NamingBeanImpl</depends>
                 </mbean>
                
                 <mbean code="org.jboss.naming.JNDIView"
                 name="jboss:service=JNDIView"
                 xmbean-dd="resource:xmdesc/JNDIView-xmbean.xml">
                 <!-- The HANamingService service name -->
                 <attribute name="HANamingService">jboss:service=HAJNDI</attribute>
                 </mbean>
                
                 <!-- ==================================================================== -->
                 <!-- Security -->
                 <!-- ==================================================================== -->
                
                 <mbean code="org.jboss.security.plugins.SecurityConfig"
                 name="jboss.security:service=SecurityConfig">
                 <attribute name="LoginConfig">jboss.security:service=XMLLoginConfig</attribute>
                 </mbean>
                 <mbean code="org.jboss.security.auth.login.XMLLoginConfig"
                 name="jboss.security:service=XMLLoginConfig">
                 <attribute name="ConfigResource">login-config.xml</attribute>
                 </mbean>
                
                 <!-- JAAS security manager and realm mapping -->
                 <mbean code="org.jboss.security.plugins.JaasSecurityManagerService"
                 name="jboss.security:service=JaasSecurityManager">
                 <!-- A flag which indicates whether the SecurityAssociation server mode
                 is set on service creation. This is true by default since the
                 SecurityAssociation should be thread local for multi-threaded server
                 operation.
                 -->
                 <attribute name="ServerMode">true</attribute>
                 <attribute name="SecurityManagerClassName">org.jboss.security.plugins.JaasSecurityManager</attribute>
                 <attribute name="DefaultUnauthenticatedPrincipal">anonymous</attribute>
                 <!-- DefaultCacheTimeout: Specifies the default timed cache policy timeout
                 in seconds.
                 If you want to disable caching of security credentials, set this to 0 to
                 force authentication to occur every time. This has no affect if the
                 AuthenticationCacheJndiName has been changed from the default value.
                 -->
                 <attribute name="DefaultCacheTimeout">1800</attribute>
                 <!-- DefaultCacheResolution: Specifies the default timed cache policy
                 resolution in seconds. This controls the interval at which the cache
                 current timestamp is updated and should be less than the DefaultCacheTimeout
                 in order for the timeout to be meaningful. This has no affect if the
                 AuthenticationCacheJndiName has been changed from the default value.
                 -->
                 <attribute name="DefaultCacheResolution">60</attribute>
                 <!-- DeepCopySubjectMode: This set the copy mode of subjects done by the
                 security managers to be deep copies that makes copies of the subject
                 principals and credentials if they are cloneable. It should be set to
                 true if subject include mutable content that can be corrupted when
                 multiple threads have the same identity and cache flushes/logout clearing
                 the subject in one thread results in subject references affecting other
                 threads.
                 -->
                 <attribute name="DeepCopySubjectMode">false</attribute>
                 </mbean>
                
                 <!-- ==================================================================== -->
                 <!-- Transactions -->
                 <!-- ==================================================================== -->
                
                 <!-- The configurable Xid factory. For use with Oracle, set pad to true -->
                 <mbean code="org.jboss.tm.XidFactory"
                 name="jboss:service=XidFactory">
                 <!--attribute name="Pad">true</attribute-->
                 </mbean>
                
                 <!--
                 | The fast in-memory transaction manager.
                 | Deprecated in JBossAS v4.2. Use JBossTS JTA instead.
                 - ->
                 <mbean code="org.jboss.tm.TransactionManagerService"
                 name="jboss:service=TransactionManager"
                 xmbean-dd="resource:xmdesc/TransactionManagerService-xmbean.xml">
                 <attribute name="TransactionTimeout">300</attribute>
                 <!- - set to false to disable transaction demarcation over IIOP - ->
                 <attribute name="GlobalIdsEnabled">true</attribute>
                 <depends optional-attribute-name="XidFactory">jboss:service=XidFactory</depends>
                
                 <!- - Transaction Integrity Checking - ->
                 <!- - Force a rollback if another thread is associated with the transaction at commit - ->
                 <!- - <depends optional-attribute-name="TransactionIntegrityFactory"
                 proxy-type="org.jboss.tm.integrity.TransactionIntegrityFactory">
                 <mbean code="org.jboss.tm.integrity.FailIncompleteTransaction"
                 name="jboss:service=TransactionManager,plugin=TransactionIntegrity"/>
                 </depends> - ->
                 </mbean>
                 -->
                
                 <!-- JBoss Transactions JTA -->
                 <mbean code="com.arjuna.ats.jbossatx.jta.TransactionManagerService"
                 name="jboss:service=TransactionManager">
                 <attribute name="TransactionTimeout">300</attribute>
                 <attribute name="ObjectStoreDir">${jboss.server.data.dir}/tx-object-store</attribute>
                 </mbean>
                
                 <!--
                 | UserTransaction support.
                 -->
                 <mbean code="org.jboss.tm.usertx.server.ClientUserTransactionService"
                 name="jboss:service=ClientUserTransaction"
                 xmbean-dd="resource:xmdesc/ClientUserTransaction-xmbean.xml">
                 <depends>
                 <mbean code="org.jboss.invocation.jrmp.server.JRMPProxyFactory"
                 name="jboss:service=proxyFactory,target=ClientUserTransactionFactory">
                 <attribute name="InvokerName">jboss:service=invoker,type=jrmp</attribute>
                 <attribute name="TargetName">jboss:service=ClientUserTransaction</attribute>
                 <attribute name="JndiName">UserTransactionSessionFactory</attribute>
                 <attribute name="ExportedInterface">org.jboss.tm.usertx.interfaces.UserTransactionSessionFactory</attribute>
                 <attribute name="ClientInterceptors">
                 <interceptors>
                 <interceptor>org.jboss.proxy.ClientMethodInterceptor</interceptor>
                 <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
                 </interceptors>
                 </attribute>
                 <depends>jboss:service=invoker,type=jrmp</depends>
                 </mbean>
                 </depends>
                 <depends optional-attribute-name="TxProxyName">
                 <mbean code="org.jboss.invocation.jrmp.server.JRMPProxyFactory"
                 name="jboss:service=proxyFactory,target=ClientUserTransaction">
                 <attribute name="InvokerName">jboss:service=invoker,type=jrmp</attribute>
                 <attribute name="TargetName">jboss:service=ClientUserTransaction</attribute>
                 <attribute name="JndiName"></attribute>
                 <attribute name="ExportedInterface">org.jboss.tm.usertx.interfaces.UserTransactionSession</attribute>
                 <attribute name="ClientInterceptors">
                 <interceptors>
                 <interceptor>org.jboss.proxy.ClientMethodInterceptor</interceptor>
                 <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
                 </interceptors>
                 </attribute>
                 <depends>jboss:service=invoker,type=jrmp</depends>
                 </mbean>
                 </depends>
                 </mbean>
                
                 <!-- ==================================================================== -->
                 <!-- Invokers to the JMX node -->
                 <!-- ==================================================================== -->
                
                 <!-- Unified invoker (based on remoting) -->
                 <mbean code="org.jboss.invocation.unified.server.UnifiedInvoker"
                 name="jboss:service=invoker,type=unified">
                 <!-- To turn on strict RMI exception propagation uncomment block below -->
                 <!-- This will cause the UnifiedInvokerProxy to wrap RemoteExceptions -->
                 <!-- within a ServerException, otherwise will throw root exception -->
                 <!-- (not RemoteException) -->
                 <!-- <attribute name="StrictRMIException">true</attribute> -->
                 <depends>jboss:service=TransactionManager</depends>
                 <depends>jboss.remoting:service=Connector,transport=socket</depends>
                 </mbean>
                
                 <!-- RMI/JRMP invoker -->
                 <mbean code="org.jboss.invocation.jrmp.server.JRMPInvoker"
                 name="jboss:service=invoker,type=jrmp">
                 <attribute name="RMIObjectPort">4444</attribute>
                 <attribute name="ServerAddress">${jboss.bind.address}</attribute>
                 <!--
                 <attribute name="RMIClientSocketFactory">custom</attribute>
                 <attribute name="RMIServerSocketFactory">custom</attribute>
                 <attribute name="RMIServerSocketAddr">custom</attribute>
                 <attribute name="SecurityDomain">ssl-domain-name</attribute>
                 -->
                 <depends>jboss:service=TransactionManager</depends>
                 </mbean>
                
                 <mbean code="org.jboss.invocation.local.LocalInvoker"
                 name="jboss:service=invoker,type=local">
                
                 <depends>jboss:service=TransactionManager</depends>
                 </mbean>
                
                 <mbean code="org.jboss.invocation.pooled.server.PooledInvoker"
                 name="jboss:service=invoker,type=pooled">
                 <attribute name="NumAcceptThreads">10</attribute>
                 <attribute name="MaxPoolSize">3000</attribute>
                 <attribute name="ClientMaxPoolSize">3000</attribute>
                 <attribute name="SocketTimeout">60000</attribute>
                 <attribute name="ServerBindAddress">${jboss.bind.address}</attribute>
                 <attribute name="ServerBindPort">4445</attribute>
                 <attribute name="ClientConnectAddress">${jboss.bind.address}</attribute>
                 <attribute name="ClientConnectPort">0</attribute>
                 <attribute name="ClientRetryCount">1</attribute>
                 <attribute name="EnableTcpNoDelay">false</attribute>
                
                 <!-- Customized socket factory attributes
                 <attribute name="ClientSocketFactoryName">custom.client.factory</attribute>
                 <attribute name="ServerSocketFactoryName">custom.server.factory</attribute>
                 <attribute name="SslDomain">java:/jaas/pooledInvoker</attribute>
                 -->
                 <depends optional-attribute-name="TransactionManagerService">jboss:service=TransactionManager</depends>
                 </mbean>
                
                 <!-- ==================================================================== -->
                 <!-- Remoting services -->
                 <!-- ==================================================================== -->
                
                 <!-- For detailed description of all these configuration attributes, please see the -->
                 <!-- JBoss Remoting User's Guide or wiki (http://labs.jboss.com/portal/jbossremoting/docs/guide/index.html) -->
                
                 <!-- The NetworkRegistry contains all the local and remote -->
                 <!-- servers that it recognizes. The remote ones registered -->
                 <!-- are dependant on the detectors running and which domains -->
                 <!-- they are configured to identify. -->
                 <mbean code="org.jboss.remoting.network.NetworkRegistry"
                 name="jboss.remoting:service=NetworkRegistry"/>
                
                 <!-- The Connector is the core component of the remoting server service. -->
                 <!-- It binds the remoting invoker (transport protocol, callback configuration, -->
                 <!-- data marshalling, etc.) with the invocation handlers. -->
                 <mbean code="org.jboss.remoting.transport.Connector"
                 name="jboss.remoting:service=Connector,transport=socket"
                 display-name="Socket transport Connector">
                
                 <!-- Can either just specify the InvokerLocator attribute and not the invoker element in the -->
                 <!-- Configuration attribute, or do the full invoker configuration in the in invoker element -->
                 <!-- of the Configuration attribute. -->
                
                 <!-- Remember that if you do use more than one param on the uri, will have to include as a CDATA, -->
                 <!-- otherwise, parser will complain. -->
                 <!-- <attribute name="InvokerLocator"><![CDATA[socket://${jboss.bind.address}:4446/?datatype=invocation]]></attribute> -->
                
                 <attribute name="Configuration">
                 <!-- Using the following <invoker> element instead of the InvokerLocator above because specific attributes needed. -->
                 <!-- If wanted to use any of the parameters below, can just add them as parameters to the url above if wanted use the InvokerLocator attribute. -->
                 <config>
                 <!-- Other than transport type and handler, none of these configurations are required (will just use defaults). -->
                 <invoker transport="socket">
                 <attribute name="dataType" isParam="true">invocation</attribute>
                 <attribute name="marshaller" isParam="true">org.jboss.invocation.unified.marshall.InvocationMarshaller</attribute>
                 <attribute name="unmarshaller" isParam="true">org.jboss.invocation.unified.marshall.InvocationUnMarshaller</attribute>
                 <!-- This will be port on which the marshall loader port runs on. -->
                 <!-- <attribute name="loaderport" isParam="true">4447</attribute> -->
                 <!-- The following are specific to socket invoker -->
                 <!-- <attribute name="numAcceptThreads">1</attribute>-->
                 <attribute name="maxPoolSize">3003</attribute>
                 <attribute name="clientMaxPoolSize" isParam="true">3004</attribute>
                 <attribute name="socketTimeout" isParam="true">600000</attribute>
                 <attribute name="serverBindAddress">${jboss.bind.address}</attribute>
                 <attribute name="serverBindPort">4446</attribute>
                 <!-- <attribute name="clientConnectAddress">216.23.33.2</attribute> -->
                 <!-- <attribute name="clientConnectPort">7777</attribute> -->
                 <attribute name="enableTcpNoDelay" isParam="true">true</attribute>
                 <!-- <attribute name="backlog">200</attribute>-->
                 <!-- The following is for callback configuration and is independant of invoker type -->
                 <!-- <attribute name="callbackMemCeiling">30</attribute>-->
                 <!-- indicates callback store by fully qualified class name -->
                 <!-- <attribute name="callbackStore">org.jboss.remoting.CallbackStore</attribute>-->
                 <!-- indicates callback store by object name -->
                 <!-- <attribute name="callbackStore">jboss.remoting:service=CallbackStore,type=Serializable</attribute> -->
                 <!-- config params for callback store. if were declaring callback store via object name, -->
                 <!-- could have specified these config params there. -->
                 <!-- StoreFilePath indicates to which directory to write the callback objects. -->
                 <!-- The default value is the property value of 'jboss.server.data.dir' and if this is not set, -->
                 <!-- then will be 'data'. Will then append 'remoting' and the callback client's session id. -->
                 <!-- An example would be 'data\remoting\5c4o05l-9jijyx-e5b6xyph-1-e5b6xyph-2'. -->
                 <!-- <attribute name="StoreFilePath">callback</attribute>-->
                 <!-- StoreFileSuffix indicates the file suffix to use for the callback objects written to disk. -->
                 <!-- The default value for file suffix is 'ser'. -->
                 <!-- <attribute name="StoreFileSuffix">cst</attribute>-->
                 </invoker>
                
                 <!-- At least one handler is required by the connector. If have more than one, must decalre -->
                 <!-- different subsystem values. Otherwise, all invocations will be routed to the only one -->
                 <!-- that is declared. -->
                 <handlers>
                 <!-- can also specify handler by fully qualified classname -->
                 <handler subsystem="invoker">jboss:service=invoker,type=unified</handler>
                 </handlers>
                 </config>
                 </attribute>
                 <depends>jboss.remoting:service=NetworkRegistry</depends>
                 </mbean>
                
                
                 <!-- <mbean code="org.jboss.remoting.detection.jndi.JNDIDetector"-->
                 <!-- name="jboss.remoting:service=Detector,transport=jndi">-->
                 <!-- host to which the detector will connect to for the JNDI server. -->
                 <!-- <attribute name="Host">localhost</attribute>-->
                 <!-- port to which detector will connect to for the JNDI server. -->
                 <!-- <attribute name="Port">5555</attribute>-->
                 <!-- context factory string used when connecting to the JNDI server. -->
                 <!-- The default is org.jnp.interfaces.NamingContextFactory. -->
                 <!-- <attribute name="ContextFactory">org.acme.NamingContextFactory</attribute> -->
                 <!-- url package string to use when connecting to the JNDI server. -->
                 <!-- The default is org.jboss.naming:org.jnp.interfaces. -->
                 <!-- <attribute name="URLPackage">org.acme.naming</attribute> -->
                 <!-- Sets the number of detection iterations before manually pinging -->
                 <!-- remote server to make sure still alive. This is needed since remote server -->
                 <!-- could crash and yet still have an entry in the JNDI server, -->
                 <!-- thus making it appear that it is still there. The default value is 5. -->
                 <!-- <attribute name="CleanDetectionNumber">20</attribute>-->
                
                 <!-- Specifies the domains in which the detector will recognize -->
                 <!-- detections. If servers are not configured to be in these -->
                 <!-- domains, they will not be added to NetworkRegistry. -->
                 <!-- <attribute name="Configuration">-->
                 <!-- <domains>-->
                 <!-- <domain>roxanne</domain>-->
                 <!-- <domain>sparky</domain>-->
                 <!-- </domains>-->
                 <!-- </attribute>-->
                 <!-- </mbean>-->
                
                
                 <!-- ==================================================================== -->
                 <!-- Monitoring and Management -->
                 <!-- ==================================================================== -->
                
                 <!-- Uncomment to enable JMX monitoring of the bean cache
                 <mbean code="org.jboss.monitor.BeanCacheMonitor"
                 name="jboss.monitor:name=BeanCacheMonitor"/>
                 -->
                
                 <!-- Uncomment to enable JMX monitoring of the entity bean locking
                 <mbean code="org.jboss.monitor.EntityLockMonitor"
                 name="jboss.monitor:name=EntityLockMonitor"/>
                 -->
                
                 <!-- ==================================================================== -->
                 <!-- An MBean that is a registry for JDBC type-mapping metadata -->
                 <!-- ==================================================================== -->
                
                 <mbean code="org.jboss.ejb.plugins.cmp.jdbc.metadata.MetaDataLibrary"
                 name="jboss.jdbc:service=metadata"/>
                
                 <!-- ==================================================================== -->
                 <!-- Deployment Scanning -->
                 <!-- ==================================================================== -->
                
                 <!-- An mbean for hot deployment/undeployment of archives.
                 -->
                 <mbean code="org.jboss.deployment.scanner.URLDeploymentScanner"
                 name="jboss.deployment:type=DeploymentScanner,flavor=URL">
                
                 <!-- Uncomment (and comment/remove version below) to enable usage of the
                 DeploymentCache
                 <depends optional-attribute-name="Deployer">jboss.deployment:type=DeploymentCache</depends>
                 -->
                 <depends optional-attribute-name="Deployer">jboss.system:service=MainDeployer</depends>
                
                 <!-- The URLComparator can be used to specify a deployment ordering
                 for deployments found in a scanned directory. The class specified
                 must be an implementation of java.util.Comparator, it must be able
                 to compare two URL objects, and it must have a no-arg constructor.
                 Two deployment comparators are shipped with JBoss:
                 - org.jboss.deployment.DeploymentSorter
                 Sorts by file extension, as follows:
                 "sar", "service.xml", "rar", "jar", "war", "wsr", "ear", "zip",
                 "*"
                 - org.jboss.deployment.scanner.PrefixDeploymentSorter
                 If the name portion of the url begins with 1 or more digits, those
                 digits are converted to an int (ignoring leading zeroes), and
                 files are deployed in that order. Files that do not start with
                 any digits will be deployed first, and they will be sorted by
                 extension as above with DeploymentSorter.
                 -->
                 <attribute name="URLComparator">org.jboss.deployment.DeploymentSorter</attribute>
                
                 <!--
                 <attribute name="URLComparator">org.jboss.deployment.scanner.PrefixDeploymentSorter</attribute>
                 -->
                
                 <!-- The FilterInstance specifies a URLLister.URLFilter for scanned
                 directories. This DeploymentFilter is initialized with the given
                 prefixes, suffixes and matches that define which URLs should be
                 ignored.
                 -->
                 <attribute name="FilterInstance"
                 attributeClass="org.jboss.deployment.scanner.DeploymentFilter"
                 serialDataType="javaBean">
                 <!-- Files starting with theses strings are ignored -->
                 <property name="prefixes">#,%,\,,.,_$</property>
                 <!-- Files ending with theses strings are ignored -->
                 <property name="suffixes">#,$,%,~,\,v,.BAK,.bak,.old,.orig,.tmp,.rej,.sh</property>
                 <!-- Files matching with theses strings are ignored -->
                 <property name="matches">.make.state,.nse_depinfo,CVS,CVS.admin,RCS,RCSLOG,SCCS,TAGS,core,tags</property>
                 </attribute>
                
                 <!-- Frequency in milliseconds to rescan the URLs for changes -->
                 <attribute name="ScanPeriod">5000</attribute>
                
                 <!-- A flag to disable the scans -->
                 <attribute name="ScanEnabled">true</attribute>
                 <attribute name="URLs">
                 deploy/
                 </attribute>
                
                
                 <attribute name="RecursiveSearch">True</attribute>
                
                 </mbean>
                
                </server>
                


                And in the jboss/server/all/deploy/ejb3.deployer/META-INF/jboss-service.xml:
                <mbean code="org.jboss.remoting.transport.Connector"
                 name="jboss.remoting:type=Connector,name=DefaultEjb3Connector,handler=ejb3">
                 <depends>jboss.aop:service=AspectDeployer</depends>
                 <attribute name="InvokerLocator">socket://${jboss.bind.address}:3873</attribute>
                 <attribute name="Configuration">
                 <config>
                 <invoker transport="socket">
                 <attribute name="numAcceptThreads">10</attribute>
                 <attribute name="maxPoolSize">3000</attribute>
                 <attribute name="clientMaxPoolSize" isParam="true">3000</attribute>
                 <attribute name="timeout" isParam="true">60000</attribute>
                 <attribute name="serverBindAddress">${jboss.bind.address}</attribute>
                 <attribute name="serverBindPort">3873</attribute>
                 <attribute name="backlog">200</attribute>
                 </invoker>
                 <handlers>
                 <handler subsystem="AOP">org.jboss.aspects.remoting.AOPRemotingInvocationHandler</handler>
                 </handlers>
                 </config>
                 </attribute>
                 </mbean>
                


                • 5. Re: JBOSS Client pooling conections problem, concurrent acce
                  mnenchev

                   

                  "PeterJ" wrote:
                  Oh, and what tool are you using to run the tests? If you have only 50 client threads running, 50 server threads should be sufficient. Perhaps the client is not closing connections properly.


                  Can you tell me some other way, to test my ejbs concurrently. I.e. I have stateful beans for users. I want to test max users doing max transactions. At the moment with http client i login 100 users in different threads and for every user i send sequentially 10 transaction requests, everything is passing through tomcat, but if there is a way to do it directly with jboss i.e. no http involve here. I just want to test how much will single jboss hold on concurrent access for my application. Any testing tools?

                  Regards.

                  • 6. Re: JBOSS Client pooling conections problem, concurrent acce
                    peterj

                    The jboss-service.xml contents look okay (I ignored the one from the conf directory, not sure why you posted that). You might try monitoring the value in the corresponding mbean named something like jboss.remoting:host=127.0.0.1,port=3873,service=invoker,transport= socket. That mbean tracks the thread pools.

                    I use JMeter to directly test EJBs. It does involve some code writing - I created a class that extends AbstractJavaSamplerClient and used it within a Java Request Sampler within the JMeter script. This works well with stateless and stateful beans (don't use the JUnit Test Sampler for stateful beans).

                    In addition, I also have my own performance testing framework which I have used to test both stateful and stateless EJBs.

                    • 7. Re: JBOSS Client pooling conections problem, concurrent acce
                      mnenchev

                       

                      "PeterJ" wrote:
                      The jboss-service.xml contents look okay (I ignored the one from the conf directory, not sure why you posted that). You might try monitoring the value in the corresponding mbean named something like jboss.remoting:host=127.0.0.1,port=3873,service=invoker,transport= socket. That mbean tracks the thread pools.

                      I use JMeter to directly test EJBs. It does involve some code writing - I created a class that extends AbstractJavaSamplerClient and used it within a Java Request Sampler within the JMeter script. This works well with stateless and stateful beans (don't use the JUnit Test Sampler for stateful beans).

                      In addition, I also have my own performance testing framework which I have used to test both stateful and stateless EJBs.


                      Thanks Peter. We found the problem. It is the database(postgres). It's connections are limited to 50 and jboss sends to many queries to it when we perform stress tests.
                      Thanks again.

                      • 8. Re: JBOSS Client pooling conections problem, concurrent acce
                        peterj

                        Ah yes, it's always the details that you don't provide that are the root cause. Glad you found the problem and are up and running.

                        • 9. Re: JBOSS Client pooling conections problem, concurrent acce
                          mnenchev

                           

                          "PeterJ" wrote:
                          Ah yes, it's always the details that you don't provide that are the root cause. Glad you found the problem and are up and running.

                          Yes, but if i knew i would never ask :).
                          Coulde you tell me some book or tutorial how to configure jboss for production. We will migrate to the last stable release.

                          • 10. Re: JBOSS Client pooling conections problem, concurrent acce
                            peterj

                            I should hire you as my straight man for my next conference presentation... ;-)

                            JBoss in Action, http://www.manning.com/jamae, the last several chapters are specific to getting ready for production. The book is based on 5.0.x, but all of the recommendations, and many of the details, apply to 4.2.x.

                            • 11. Re: JBOSS Client pooling conections problem, concurrent acce
                              peterj

                              Oh, and the errata for the book has updates for 5.1.0.GA