[jboss-jira] [JBoss JIRA] Closed: (JBMESSAGING-1210) Simple messaging test unable to drive CPU utilization better than 20%
Tim Fox (JIRA)
jira-events at lists.jboss.org
Mon Mar 3 15:35:57 EST 2008
[ http://jira.jboss.com/jira/browse/JBMESSAGING-1210?page=all ]
Tim Fox closed JBMESSAGING-1210.
--------------------------------
Resolution: Out of Date
> Simple messaging test unable to drive CPU utilization better than 20%
> ---------------------------------------------------------------------
>
> Key: JBMESSAGING-1210
> URL: http://jira.jboss.com/jira/browse/JBMESSAGING-1210
> Project: JBoss Messaging
> Issue Type: Bug
> Affects Versions: 1.3.0.GA
> Environment: EAP 4.2 running JBoss Messaging 1.3. Solaris 10 running
> on Sun T2000 server. Note that T2000 is able to run 32 threads
> concurrently. We routinely run various tests to confirm AS is fully
> utilizing available CPU.
> Reporter: P Duffy
> Assigned To: Tim Fox
>
> After several months, we have been unable to resolve a JBM performance issue. Recent JBoss consultant visit has not helped.
> We narrowed down our performance test to the following:
> - several instances of a multi threaded test client sending a simple
> ObjectMessage into a single AS instance.
> - a single MDB is deployed in the AS instance. This MDB consumes the
> message and throws it away (does nothing with it).
> When this test is run, the AS instance indicates messages are backing up
> in the Q, yet the clients are unable to drive the CPU past 20% utilization.
> We've tried the following tuning adjustments:
> (1) maxSession Annotation on MDB:
> @ActivationConfigProperty(propertyName = "maxSession", propertyValue
> = "300")
>
> (2) maxSize in server/default/deploy/ejb3-interceptors-aop.xml, on
> Message Driven Bean:
> @org.jboss.annotation.ejb.PoolClass
> (value=org.jboss.ejb3.StrictMaxPool.class, maxSize=300, timeout=10000)
>
> (3) maxPoolSize and numAcceptThreads in
> server/default/deploy/jboss-messaging.sar/remoting-service.xml
> <attribute name="maxPoolSize" isParam="true">300</attribute>
> <attribute name="numAcceptThreads" isParam="true">50</attribute>
> (4) maxPoolSize in ThreadPool in /server/default/conf/jboss-service.xml
> <attribute name="MaximumPoolSize">800</attribute>
> Specific documentation re: JBM performance tuning is utterly lacking.
> We have tried to piece together various shreds of configuration from
> support cases, consultant comments, etc. to no avail.
> We need SPECIFIC direction from JBoss re: how to properly configure
> messaging to fully utilize available CPU. Else identify underlying bugs
> and resolve same.
> P.S. We have performed some examination of the JBM 1.3 code. With the
> huge caveat that we are not expert re: JBM internals, we have identified
> one location at which 100+ threads appear to be waiting on a single
> threaded synchronization point. See below.
> -----Original Message-----
> From: Mickael Graham (mickaelg)
> Sent: Monday, December 17, 2007 5:21 PM
> To: Nick Culpepper (nculpepp)
> Subject: Re: Thread dump for MDBEcho test
> Yes. Heaps of threads are blocked on this:
> at
> org.jboss.jms.server.remoting.JMSServerInvocationHandler.invoke(JMSServe
> rInvocationHandler.java:105)
> - waiting to lock <0xfffffffeb17129b8> (a java.lang.Class)
> This is where the performance problem is. Looking at the JBoss
> messaging code:
> public Object invoke(InvocationRequest invocation) throws Throwable
> {
> if (trace) { log.trace("invoking " + invocation); }
> synchronized (JMSServerInvocationHandler.class)
> {
> if (closed)
> {
> throw new MessagingJMSException("Cannot handle invocation
> since messaging server is not active (it is either starting up or
> shutting down)");
> }
> RequestSupport request =
> (RequestSupport)invocation.getParameter();
> if (request instanceof
> ConnectionFactoryCreateConnectionDelegateRequest)
> {
> //Create connection request
> ConnectionFactoryCreateConnectionDelegateRequest cReq =
> (ConnectionFactoryCreateConnectionDelegateRequest)request;
> String remotingSessionId = cReq.getRemotingSessionID();
> ServerInvokerCallbackHandler callbackHandler = null;
> synchronized(callbackHandlers)
> {
> callbackHandler =
> (ServerInvokerCallbackHandler)callbackHandlers.get(remotingSessionId);
> }
> if (callbackHandler != null)
> {
> log.debug("found calllback handler for remoting session
> " + Util.guidToString(remotingSessionId));
> cReq.setCallbackHandler(callbackHandler);
> }
> else
> {
> throw new IllegalStateException("Cannot find callback
> handler " +
> "for session id " +
> remotingSessionId);
> }
> }
> return request.serverInvoke();
> }
> }
> Basically this is for delivering I believe and that looks single
> threaded. Perhaps once its delivered, it will not be single threaded.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list