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