I'm seeing an issue activemq-pool's PooledConnectionFactory, with a pretty simple test case of producing messages. Within my client, the underlying pool appears as though it is not cleaning up some objects under the PooledConnection class correctly. I'm seeing the following classes grow at the top of my Heap Histogram in JVisualVM.
Class, Instances (%), Size (%) java.util.concurrent.locks.ReentrantLock$NonfairSync, 314153 (19.7%), 13822732 (27.9%) java.lang.Object[], 314020 (19.7%), 6326656 (12.8%) java.util.concurrent.locks.ReentrantLock, 313209 (19.6%), 7517016 (15.2%) java.util.concurrent.CopyOnWriteArrayList, 313183 (19.6%), 10021856 (20.2%) org.apache.activemq.pool.PooledConnection, 156562 (9.8%), 6419042 (13%) org.apache.activemq.pool.PooledConnection$1, 156562 (9.8%), 357488 (7.6%) Everything else is sub 1% of heap. My connection factory is set up like this: connectionFactory = new ActiveMQConnectionFactory( userId, passWord, brokerURL); RedeliveryPolicy policy = connectionFactory.getRedeliveryPolicy(); int reDeliveryDelay = Integer.parseInt(props.getProperty("xcal.mbus.InitialReDeliveryDelay")); int maxReDeliveryCount = Integer.parseInt(props.getProperty("xcal.mbus.MaxReDelivery")); policy.setInitialRedeliveryDelay(reDeliveryDelay); policy.setMaximumRedeliveries(maxReDeliveryCount); policy.setBackOffMultiplier(2); policy.setUseExponentialBackOff(true); producerConnectionFactory = new PooledConnectionFactory(connectionFactory); producerConnectionFactory.start(); And used like this: public TextMessage sendTextMessage(String destinationType, String destinationName, String message) throws JMSException { TextMessage m = null; Connection connection=null; MessageProducer producer=null; Session session=null; try{ connection = producerConnectionFactory.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); producer = session.createProducer(null); Destination destination=null; if ( "QUEUE".equalsIgnoreCase(destinationType) ){ destination = session.createQueue(destinationName); }else if ("TOPIC".equalsIgnoreCase(destinationType)){ destination = session.createTopic(destinationName); } m = session.createTextMessage(message); producer.send(destination, m, DeliveryMode.PERSISTENT, producer.getPriority(),0L); }catch(JMSException e){ log.error( "Received exception in sendTextMessage: " + e.getMessage()); throw e; }finally { try{ if( producer != null ) producer.close(); }catch(JMSException jmsexp1){ } try { if (session != null) session.close(); }catch(JMSException jmsexp2) { } try{ if (connection != null) connection.close(); }catch(JMSException jmsexp3){ } } return m; } To test, if I just call this in a while loop I notice the connectionPool seems to grow, creating new instances that all seem to point to the same spot Object[] CopyOnWriteArrayList PooledConnection PooledConnection$1 Object[] CopyOnWriteArrayList PooledSession ** tempDestEventListeners ** Any thoughts? -- View this message in context: http://activemq.2283324.n4.nabble.com/Number-of-PooledConnection-and-PooledConnection-1-instances-in-heap-growing-linearly-with-produced-mp-tp4654265.html Sent from the ActiveMQ - User mailing list archive at Nabble.com.