And the all the messages shows this on thread dump..

"pool-flow.seda.servicemix-jms-thread-1433" - Thread t...@6141
   java.lang.Thread.State: WAITING on
java.util.concurrent.locks.abstractqueuedsynchronizer$conditionobj...@1540b71
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
        at 
java.util.concurrent.ArrayBlockingQueue.put(ArrayBlockingQueue.java:252)
        at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:676)
        at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
        at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)

   Locked ownable synchronizers:
        - locked java.util.concurrent.locks.reentrantlock$nonfairs...@19353a3

.............
............


subh wrote:
> 
> Continuing the discussion. I am seeing jms messages getting stuck in the
> queue and not getting published to the topic..On taking thread dump, I saw
> one instance where SMX client I am using was in waiting state..causing all
> the messages subsequent to that to be queued.
> 
> Also, I think it happened while both jmsconsumers (i have another consumer
> and provider combination) was receiving messages simultaneously although
> the other jms provider has a higher priority than this one.
> 
> Any idea/suggestions on what might be causing it will be great..
> 
> Below is my jmsconsumer
> 
> <jms:consumer service="orderservice:extOrderConsumerQueue"
>                   endpoint="jmsInQueueConsumer"
>                   targetService="orderservice:orderPublisherBean"
>                   targetEndpoint="endpoint"
>                   destinationName="queue/ORS/OrderIn"                  
>                   pubSubDomain="false"       
>                   cacheLevel="1"
>                   connectionFactory="#connectionFactory" />
> 
> and jmsprovider
> 
> <jms:provider service="orderservice:orsDispatchedOrder"
>                   endpoint="orsProvider"
>                   destinationName="topic/ORS/OrderIn"
>                   connectionFactory="#connectionFactory"
>                                 pubSubDomain="true"
>                   />
> 
> and this the SMX bean code using SMX client to publish message to the
> topic
> 
> private static final String ORS_LOE_JMS_PROVIDER_SERVICE =
> "service:http://services.fuelquest.com/orderservice/orsDispatchedOrder";;
> ......
> .....
> if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
>                                smxclient = SMXClient.getInstance();
>                                Destination destination =
> smxclient.createDestination(ORS_LOE_JMS_PROVIDER_SERVICE);
>                                Message message = 
> destination.createInOnlyMessage();
>                                message.setProperty(REPLY_HEADER, 
> Boolean.TRUE);
>                                message.setBody(messageBody);                  
>  
>                                smxclient.send(message);
>                                smxclient.done(exchange);
> }
> 
> and the snippet from the thread dump....
> 
> "pool-flow.seda.servicemix-bean-thread-1975" - Thread t...@6142
>    java.lang.Thread.State: WAITING on
> java.util.concurrent.locks.abstractqueuedsynchronizer$conditionobj...@1540b71
>       at sun.misc.Unsafe.park(Native Method)
>       at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
>       at
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
>       at
> java.util.concurrent.ArrayBlockingQueue.put(ArrayBlockingQueue.java:252)
>       at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:676)
>       at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>       at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>       at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>       at
> java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy.rejectedExecution(ThreadPoolExecutor.java:1738)
>       at
> java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767)
>       at
> java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:658)
>       at
> org.apache.servicemix.executors.impl.ExecutorImpl.execute(ExecutorImpl.java:53)
>       at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue.enqueue(SedaQueue.java:128)
>       at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.enqueuePacket(SedaFlow.java:183)
>       at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doSend(SedaFlow.java:163)
>       at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.send(AbstractFlow.java:123)
>       at
> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:283)
>       at
> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:88)
>       at
> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:903)
>       at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:396)
>       at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:432)
>       at
> org.apache.servicemix.common.EndpointDeliveryChannel.send(EndpointDeliveryChannel.java:89)
>       at
> org.apache.servicemix.common.endpoints.SimpleEndpoint.send(SimpleEndpoint.java:70)
>       at
> org.apache.servicemix.common.endpoints.SimpleEndpoint.done(SimpleEndpoint.java:85)
>       at
> org.apache.servicemix.jms.endpoints.JmsProviderEndpoint.process(JmsProviderEndpoint.java:500)
>       at
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:627)
>       at
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:581)
>       at
> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:535)
>       at
> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>       at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:623)
>       at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>       at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>       at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>       at
> java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy.rejectedExecution(ThreadPoolExecutor.java:1738)
>       at
> java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767)
>       at
> java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:658)
>       at
> org.apache.servicemix.executors.impl.ExecutorImpl.execute(ExecutorImpl.java:53)
>       at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue.enqueue(SedaQueue.java:128)
>       at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.enqueuePacket(SedaFlow.java:183)
>       at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doSend(SedaFlow.java:163)
>       at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.send(AbstractFlow.java:123)
>       at
> org.apache.servicemix.jbi.nmr.DefaultBroker.sendExchangePacket(DefaultBroker.java:283)
>       at
> org.apache.servicemix.jbi.security.SecuredBroker.sendExchangePacket(SecuredBroker.java:88)
>       at
> org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:903)
>       at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:396)
>       at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:432)
>       at
> org.apache.servicemix.client.DefaultServiceMixClient.send(DefaultServiceMixClient.java:148)
>       at
> org.apache.servicemix.client.DefaultServiceMixClient.send(DefaultServiceMixClient.java:152)
>       at
> com.fuelquest.service.fqservices.orsesb.beansu.OrderServicePublishCallerBean.writeOrderPublishedMessageToSendOut(OrderServicePublishCallerBean.java:235)
>       at
> com.fuelquest.service.fqservices.orsesb.beansu.OrderServicePublishCallerBean.onMessageExchange(OrderServicePublishCallerBean.java:141)
>       at
> org.apache.servicemix.bean.BeanEndpoint.onProviderExchange(BeanEndpoint.java:230)
>       - locked org.apache.servicemix.bean.support.requ...@17474ef
>       at 
> org.apache.servicemix.bean.BeanEndpoint.process(BeanEndpoint.java:217)
>       at
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:627)
>       at
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:581)
>       at
> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:535)
>       at
> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>       at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:623)
>       at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>       at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>       at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>       at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>       at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>       at java.lang.Thread.run(Thread.java:619)
> 
>    Locked ownable synchronizers:
>       - locked java.util.concurrent.locks.reentrantlock$nonfairs...@a93013
> 
> 
> 
> Eighty8 wrote:
>> 
>> No probelem.  I saw blocks i the Saxon API's too...which is used by
>> things other than eip...good luck.
>> -A
>> 
>> subh wrote:
>>> 
>>> Thanks for the input and suggestions.
>>> 
>>> As of now, I have removed the EIP component from the flow as I had
>>> observed the exchange waiting for threads to finish.
>>> 
>>> Also, I have defined separate connection pool for the jms components as
>>> suggested in a different thread. I am seeing much better performance,
>>> but will need to monitor for a few days to.
>>> 
>>> 
>>> 
>>> Eighty8 wrote:
>>>> 
>>>> I found I had to throttle my messages by sleeping ~250-500ms apart.  I
>>>> recommend buying a YourKit license and attaching it to your server. 
>>>> You'll see a lot more of what's going on under the hood.  Look for
>>>> 'lots of read' in the threads indicating blocks that are waiting to
>>>> clear.
>>>> 
>>>> I have not had success, yet, using component.properties to controls the
>>>> eip and saxon LifeCycles, but am continuing to try to get that working.
>>>> 
>>>> You can inspect the configurable properties by enabling jetty on your
>>>> ESB and access jmx-console.
>>>> Good luck.
>>>> 
>>>> 
>>>> subh wrote:
>>>>> 
>>>>> I have a simple flow as below
>>>>> 
>>>>> External message producer --> SMX JMS queue --> SMX Bean --> Camel
>>>>> router --> SMX JMS Topic
>>>>> 
>>>>> The servicemix bean has the business logic to generate the outgoing
>>>>> message. 
>>>>> To forward the message onto the next service, I am using
>>>>> ServiceMixClient. 
>>>>> 
>>>>> I am using the ClientFactory to create a instance of the client.
>>>>> 
>>>>> ClientFactory factory = new
>>>>> InitialContext().lookup(ClientFactory.DEFAULT_JNDI_NAME);
>>>>> ServiceMixClient client = factory.createClient();
>>>>> 
>>>>> But after processing 1000 - 1500 messages, the Servicemix bean
>>>>> component becomes very slow to respond. On checking the log, I see
>>>>> that the bean thread count increases considerably and the expired
>>>>> threads are not garbage collected. 
>>>>> 
>>>>> Due to this, all incoming messages are getting blocked which forces us
>>>>> to restart the servicemix server. Once it is restarted, the processing
>>>>> becomes very fast and we come to the same situation again in a day or
>>>>> so.
>>>>> 
>>>>> Am I doing something wrong by using the ServicemixClient inside the
>>>>> bean? If no, then what are the best practices for using the Servicemix
>>>>> client class.
>>>>> 
>>>>> Are there alternative ways to specify the "target service" from the
>>>>> SMX bean endpoint?
>>>>> 
>>>>> Any hint or suggestion would be helpful.
>>>>> 
>>>>> I am using activemq5.3 and servicemix 3.3
>>>>> 
>>>>> Regards
>>>>> Subh
>>>>> 
>>>> 
>>>> 
>>> 
>>> 
>> 
>> 
> 
> 

-- 
View this message in context: 
http://old.nabble.com/ServicemixBean-thread-issue..-tp27714350p27823959.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to