Hi, I finally figured out how to use jconsole remotely (I had a misunderstanding of what value to use in -Djava.rmi.server.hostname=<host>, using the jconsole's machine's IP address instead of the target).
Going back to running unit tests based on both libstomp and activemq-cpp (2.2.1), I can see, using jconsole, the Heap usage continuously rise (albeit with a sawtooth), and then reach its limit. At this point the unit tests halt. What seems the most interesting of all the Memory Pools is the "Tenured Gen" which eventually plateau's when the Used=Committed=Max. The activemq.log, which periodically has the KahaDB slow messages or PageFile flush messages, suddenly stops. No interesting messages. (by the way I reduced the heap down to 64M to get it to saturate quicker). I'm not really sure where to look. So I took a look at the MBeans. The AMQ-BROKER attributes shows StorePercentUsage = 56 TotalDequeueCount = 214618 TotalEnqueueCount = 429046 TotalMessageCount = 214428 MemoryLimit = 20971520 StoreLimit = 104857600 TotalConsumerCount=2 I've read a little about the Total Enqueue/Message/Dequeue counters, but still don't understand how they relate to each other. A picture would be worth a thousand words. The setup is fairly simple right now, sending persistent messages. Producer - - > JMS Queue - - > Server - - > JMS Durable Topic - - > Consumer The Queue shows DequeueCount = 214618 DispatchCount = 214618 EnqueCount = 214618 MemoryPercentUsage = 0 The Topic seems more interesting DequeueCount = 0 DispatchCount = 214236 EnqueueCount = 214428 MemoryPercentUsage = 0 Is it strange that the Dequeue Count for the Topic is zero? I know the consumer of the Topic is receiving messages. Why would the Dequeue Count be zero? Is the consumer suppose to be doing something that it's not? Any other places in jconsole I should be looking to determine where all the heap is going? Thanks! Peter P -----Original Message----- From: Peter P [mailto:ppoth...@crossbeamsys.com] Sent: Wednesday, March 17, 2010 5:56 PM To: users@activemq.apache.org Subject: ActiveMQ 5.3.0 Memory Usage - Connections Hi, We are using ActiveMQ 5.3.0, with both libstomp and ActiveMQ-CPP producer and consumer clients, sending persistent messages to both queues and topics. We have noticed the amount of memory used by ActiveMQ (reported by linux top) grows over time. Trying to determine whether the memory grew in response to messages or connections, we noticed using a python script based on stomppy-2.0.4-1cb, that ActiveMQ memory grew rather quickly when we connected and disconnected multiple times. Here's the basis of the script for i in range (0,1000) : conn = stomp.Connection() conn.set_listener('', MyListener()) conn.start() conn.connect() conn.disconnect() Using jmap/jhat, here's the most popular Instance Counts and Histogram prior to running the script PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 29892 root 19 0 823m 95m 10m S 0.0 2.4 0:07.86 java All Classes (excluding platform) Class Instance Count Total Size class [B 6288 7214080 class [C 26005 2285484 class [I 4775 916612 class java.lang.reflect.Method 6971 899259 class java.lang.Class 4802 691488 class java.lang.String 25732 514640 class [Ljava.util.HashMap$Entry; 3240 514504 class [S 6384 396498 class [Ljava.lang.Object; 4263 378984 class [Lorg.apache.activemq.command.DataStructure; 2 262160 class java.util.LinkedHashMap$Entry 4471 196724 Instance Counts for All Classes (including platform) 26005 instances of class [C 25732 instances of class java.lang.String 6971 instances of class java.lang.reflect.Method 6741 instances of class [Ljava.lang.Class; 6384 instances of class [S 6288 instances of class [B 5806 instances of class java.util.HashMap$Entry 4802 instances of class java.lang.Class 4775 instances of class [I 4471 instances of class java.util.LinkedHashMap$Entry 4263 instances of class [Ljava.lang.Object; and after running the script a bunch of times PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 29892 root 18 0 880m 153m 10m S 0.0 3.9 0:35.62 java Heap Histogram All Classes (excluding platform) Class Instance Count Total Size class [B 9880 16696961 class [C 32597 3238584 class [I 4823 2948344 class java.util.concurrent.ConcurrentHashMap$Segment 65216 2086912 class java.util.concurrent.locks.ReentrantLock$NonfairSync 66712 1867936 class [Ljava.util.concurrent.ConcurrentHashMap$HashEntry; 65216 1570048 class [Ljava.util.HashMap$Entry; 6575 1022200 class java.lang.reflect.Method 6895 889455 class java.lang.Class 4832 695808 class java.lang.String 31143 622860 class [Ljava.util.concurrent.ConcurrentHashMap$Segment; 4076 586944 class org.apache.activemq.command.ActiveMQMessage 1812 467496 class [S 6077 370234 class java.util.HashMap$Entry 11704 327712 class [Ljava.lang.Object; 5130 318360 class java.net.SocksSocketImpl 1755 282555 class [Lorg.apache.activemq.command.DataStructure; 2 262160 class java.util.HashMap 5182 248736 class java.util.concurrent.ConcurrentHashMap 4076 228256 class java.util.LinkedHashMap$Entry 4155 182820 Instance Counts for All Classes (including platform) 66712 instances of class java.util.concurrent.locks.ReentrantLock$NonfairSync 65216 instances of class java.util.concurrent.ConcurrentHashMap$Segment 65216 instances of class [Ljava.util.concurrent.ConcurrentHashMap$HashEntry; 32597 instances of class [C 31143 instances of class java.lang.String 11704 instances of class java.util.HashMap$Entry 9880 instances of class [B 9371 instances of class java.lang.Object 6895 instances of class java.lang.reflect.Method 6575 instances of class [Ljava.util.HashMap$Entry; 6143 instances of class [Ljava.lang.Class; 6077 instances of class [S 5182 instances of class java.util.HashMap 5130 instances of class [Ljava.lang.Object; 4832 instances of class java.lang.Class 4823 instances of class [I Here are the diffs between our config file and activemq-demo.xml 51c51 < <broker xmlns="http://activemq.apache.org/schema/core" brokerName="amq-broker" useJmx="true"> --- > <broker xmlns="http://activemq.apache.org/schema/core" > brokerName="amq-broker" persistent="true" useJmx="true"> 68c68 < <policyEntry queue=">" producerFlowControl="true" memoryLimit="5mb"/> --- > <policyEntry queue=">" producerFlowControl="false" > memoryLimit="5mb"/> 76a77,79 > <messageEvictionStrategy> > <oldestMessageEvictionStrategy/> > </messageEvictionStrategy> 81d83 < --> 82a85,87 > <timedSubscriptionRecoveryPolicy > recoverDuration="60000" /> > --> > <fixedCountSubscriptionRecoveryPolicy > maximumSize="300" /> 83a89 > 88a95,96 > > 197c205 < <!-- Create a TCP transport that is advertised on via an IP multicast --- > <!-- Create a TCP transport that is NOT advertised on via an > IP multicast 199c207 < <transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default"/> --- > <transportConnector name="openwire" > uri="tcp://localhost:61616?transport.keepAliveResponseRequired=true;wire Format.tcpNoDelayEnabled=true"/> 204c212 < <transportConnector name="stomp" uri="stomp://localhost:61613"/> --- > <transportConnector name="stomp" > uri="stomp://localhost:61613?wireFormat.tcpNoDelayEnabled=true"/> 208a217,219 > > > 325c336,337 < </beans> \ No newline at end of file --- > > </beans> Checking the ActiveMQ 5.3.1 Fixed Issues page http://issues.apache.org/activemq/browse/AMQ/fixforversion/12183 this sounds different from any issue. We run with only a single instance of ActiveMQ. Are there any configuration parameters that controls this behavior? Does ActiveMQ normally grow this large, cleaning up periodically? Is this normal behavior? Is there something I should be looking for? Thanks, Peter P -- View this message in context: http://old.nabble.com/ActiveMQ-5.3.0-Memory-Usage---Connections-tp279378 10p27937810.html Sent from the ActiveMQ - User mailing list archive at Nabble.com.