Le 15/01/10 11:25, Gary Tully a écrit :
> A thread dump of the broker jvm, when the clients are stalled, would help
> diagnose what is going on. btw, what activemq version are you using?
>   
BrokerService                  - ActiveMQ 5.2.0 JMS Message Broker
(localhost) is starting

I'll come back with broker dump when there is a problem again. This can
be in several hours or within a few weeks. However i'll try to force a
stalling next week...


> 2010/1/15 David Delbecq <de...@oma.be>
>
>   
>> Le 15/01/10 10:24, Dejan Bosanac a écrit :
>>     
>>> Hi David,
>>>
>>> you're probably blocked by "producer flow control". Take a look here
>>> for more info: http://activemq.apache.org/producer-flow-control.html
>>>
>>> Cheers
>>>       
>> I already took a look at it, read it three time to be sure i understand.
>> It's quite technical but beyond that, i don't think this apply for me.
>> My queues are all empty!!! (they stalled when there were 50 messages
>> pending but where finally emptied), connections are not shared by
>> several queues and am not sure how to implement the cursor part of
>> documentation. There is no "slow consumer" that could influence it at
>> that right moment (customers are running an waiting for new messages as
>> you can see in capture). Moreover my messages are of about 1k payload
>> (about 10 small text entries in a MapMessage), and my activeMQ config is
>> like this
>>                    <policyEntry queue=">" memoryLimit="500mb"/>
>>                    <policyEntry topic=">" memoryLimit="500mb">
>> ....
>>        <systemUsage>
>>            <systemUsage>
>>                <memoryUsage>
>>                    <memoryUsage limit="20 mb"/>
>>                </memoryUsage>
>>                <storeUsage>
>>                    <storeUsage limit="1 gb" name="foo"/>
>>                </storeUsage>
>>                <tempUsage>
>>                    <tempUsage limit="100 mb"/>
>>                </tempUsage>
>>            </systemUsage>
>>        </systemUsage>
>>
>>
>> There is no way a bunch of 10 pending messages could fill a 1gb store,
>> isn't it? What config part of activemq do i need to change to ensure
>> that it can store at least about 10000 persistent messages (that makes
>> only 10Mb of datas!!) before failing? Currently it fails and  is never
>> recovering without a restart of broker when there are only 50 small
>> pending messages in the queue. As a workaround i have set
>> "sendFailIfNoSpace" to true, so my client will fail instead of stalling,
>> i'll see when this happen more quickly like that....
>>
>>
>> Here is broker part of my config file, can someone help me fix this?
>> Thank you:
>>
>>
>>    <broker xmlns="http://activemq.apache.org/schema/core";
>> brokerName="localhost" dataDirectory="${activemq.base}/data"
>> persistent="true">
>>        <plugins>
>>        <simpleAuthenticationPlugin>
>>          <users>
>>                <authenticationUser username="admin" password="******"
>>                        groups="users,admins"/>
>>                <authenticationUser username="sharkTool" password="********"
>>                        groups="serverTools"/>
>>                <authenticationUser username="adminConsole"
>> password="*********"
>>                        groups="serverTools"/>
>>          </users>
>>        </simpleAuthenticationPlugin>
>>      <authorizationPlugin>
>>        <map>
>>          <authorizationMap>
>>            <authorizationEntries>
>>              <authorizationEntry queue=">" read="admins" write="admins"
>> admin="admins" />
>>              <authorizationEntry queue="WF.>" read="users,serverTools"
>> write="serverTools" admin="admins,serverTools" />
>>
>>              <authorizationEntry topic=">" read="admins" write="admins"
>> admin="admins" />
>>              <authorizationEntry topic="WF.>" read="users,serverTools"
>> write="serverTools" admin="admins,serverTools" />
>>
>>              <authorizationEntry topic="ActiveMQ.Advisory.>"
>> read="guests,users,serverTools" write="guests,users,serverTools"
>> admin="guests,users,serverTools"/>
>>            </authorizationEntries>
>>
>>            <!-- let's assign roles to temporary destinations. comment
>> this entry if we don't want any roles assigned to temp destinations
>>            <tempDestinationAuthorizationEntry>
>>              <tempDestinationAuthorizationEntry
>> read="tempDestinationAdmins" write="tempDestinationAdmins"
>> admin="tempDestinationAdmins"/>
>>           </tempDestinationAuthorizationEntry>          -->
>>          </authorizationMap>
>>        </map>
>>      </authorizationPlugin>
>>
>>
>>        </plugins>
>>        <!-- Destination specific policies using destination names or
>> wildcards -->
>>        <destinationPolicy>
>>            <policyMap>
>>                <policyEntries>
>>                    <policyEntry queue=">" memoryLimit="500mb"/>
>>                    <policyEntry topic=">" memoryLimit="500mb">
>>                      <!-- you can add other policies too such as these
>>                        <dispatchPolicy>
>>                            <strictOrderDispatchPolicy/>
>>                        </dispatchPolicy>
>>                        <subscriptionRecoveryPolicy>
>>                            <lastImageSubscriptionRecoveryPolicy/>
>>                        </subscriptionRecoveryPolicy>
>>                      -->
>>                    </policyEntry>
>>                </policyEntries>
>>            </policyMap>
>>        </destinationPolicy>
>>
>>        <!-- Use the following to configure how ActiveMQ is exposed in
>> JMX -->
>>        <managementContext>
>>            <managementContext createConnector="false"/>
>>        </managementContext>
>>
>>        <!-- The store and forward broker networks ActiveMQ will listen
>> to -->
>>        <networkConnectors>
>>            <!-- by default just auto discover the other brokers -->
>>            <!-- <networkConnector name="default-nc"
>> uri="multicast://default"/>-->
>>            <!-- Example of a static configuration:
>>            <networkConnector name="host1 and host2"
>> uri="static://(tcp://host1:61616,tcp://host2:61616)"/>
>>            -->
>>        </networkConnectors>
>>
>>        <persistenceAdapter>
>>            <amqPersistenceAdapter syncOnWrite="false"
>> directory="${activemq.base}/data" maxFileLength="20 mb"/>
>>        </persistenceAdapter>
>>
>>
>>
>>        <sslContext>
>>            <sslContext keyStore="file:${activemq.base}/conf/broker.ks"
>> keyStorePassword="password"
>> trustStore="file:${activemq.base}/conf/broker.ts"
>> trustStorePassword="password"/>
>>        </sslContext>
>>
>>        <!--  The maximum about of space the broker will use before
>> slowing down producers -->
>>        <systemUsage>
>>            <systemUsage>
>>                <memoryUsage>
>>                    <memoryUsage limit="20 mb"/>
>>                </memoryUsage>
>>                <storeUsage>
>>                    <storeUsage limit="1 gb" name="foo"/>
>>                </storeUsage>
>>                <tempUsage>
>>                    <tempUsage limit="100 mb"/>
>>                </tempUsage>
>>            </systemUsage>
>>        </systemUsage>
>>
>>
>>        <!-- The transport connectors ActiveMQ will listen to -->
>>        <transportConnectors>
>>            <transportConnector name="openwire"
>> uri="tcp://localhost:61616"/>
>>            <!-- <transportConnector name="ssl"
>> uri="ssl://localhost:61617"/>
>>            <transportConnector name="stomp" uri="stomp://localhost:61613"/>
>>            <transportConnector name="xmpp"
>> uri="xmpp://localhost:61222"/> -->
>>        </transportConnectors>
>>        <destinations>
>>            <queue physicalName="WF.Regraph" />
>>              <queue physicalName="WF.Notify"/>
>>              <topic physicalName="WF.Events"/>
>>        </destinations>
>>            <destinationInterceptors>
>>      <virtualDestinationInterceptor>
>>        <virtualDestinations>
>>          <compositeQueue name="WF.IncomingEvents">
>>            <forwardTo>
>>              <queue physicalName="WF.Regraph"/>
>>              <queue physicalName="WF.Notify"/>
>>              <topic physicalName="WF.Events" />
>>            </forwardTo>
>>          </compositeQueue>
>>        </virtualDestinations>
>>      </virtualDestinationInterceptor>
>>    </destinationInterceptors>
>>
>>
>>    </broker>
>>
>>
>>     
>>> --
>>>
>>>
>>> On Fri, Jan 15, 2010 at 10:24 AM, David Delbecq <de...@oma.be
>>> <mailto:de...@oma.be>> wrote:
>>>
>>>     Hello,
>>>
>>>     can someone explain me why my activeMQ client is stalled in such
>>>     situation (i have 10 threads blocked like this having as
>>>     consequence a complete blocking of my client application):
>>>
>>>     "http-8081-Processor6" daemon prio=10 tid=00841c38 nid=512
>>>     lwp_id=2426611 waiting on condition [236f3000..236f153c]
>>>        java.lang.Thread.State: WAITING (parking)
>>>             at sun.misc.Unsafe.park(Native Method)
>>>             - parking to wait for  <40ae1828> (a
>>>
>>>       
>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
>>     
>>>             at
>>>     java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
>>>             at
>>>
>>>       
>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1889)
>>     
>>>             at
>>>
>>>       
>> java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:317)
>>     
>>>             at
>>>
>>>       
>> org.apache.activemq.transport.FutureResponse.getResult(FutureResponse.java:40)
>>     
>>>             at
>>>
>>>       
>> org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:80)
>>     
>>>             at
>>>
>>>       
>> org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1233)
>>     
>>>             at
>>>     org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1659)
>>>             - locked <40ae01e8> (a java.lang.Object)
>>>             at
>>>
>>>       
>> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:227)
>>     
>>>             at
>>>
>>>       
>> org.apache.activemq.ActiveMQMessageProducerSupport.send(ActiveMQMessageProducerSupport.java:241)
>>     
>>>             at
>>>     be.rmi.shark.JMSEventManager.sendEvent(JMSEventManager.java:146)
>>>
>>>
>>>     considering that the activeMQ lists size, as referenced by
>>>     activeMQ admin interface are as follow:
>>>     Name      Number Of Pending Messages      Number Of Consumers
>>>     Messages Sent     Messages Received       Views           Operations
>>>     WF.Regraph        0       1       1714    1720    Browse  Send To
>>>       
>> Purge Delete
>>     
>>>     WF.Notify         0       1       1696    1742    Browse  Send To
>>>       
>> Purge Delete
>>     
>>>     WF.IncomingEvents         0       0       0       0       Browse
>>>       
>>  Send To Purge Delete
>>     
>>>     Is this to be considered normal that i must restart activeMQ
>>>     producers on a regular basis because of those this stalling? Where
>>>     can i find clear documentation on proper configuration of activeMQ
>>>     to prevent this stalling? Thank you.
>>>
>>>     --
>>>     David Delbecq
>>>     ICT
>>>     Institut Royal Météorologique
>>>     Ext:557
>>>
>>>
>>>
>>>       
>> --
>> David Delbecq
>> ICT
>> Institut Royal Météorologique
>> Ext:557
>>
>>
>>     
>
>
>   


-- 
David Delbecq
ICT
Institut Royal Météorologique
Ext:557

Reply via email to