You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by easyl <ea...@gmail.com> on 2010/04/29 11:29:25 UTC
Re: ActiveMQConnection leaks memory by caching ActiveMQTempQueue
objects
Hallo,
I did not pool the AMQ connection by myself, but setting a pool in Geronimo
for AMQ.
Therefore I can understand why there are always some ActiveMQConnection
staying in memory.
> <conn:resourceadapter>
> <conn:resourceadapter-instance>
> <conn:resourceadapter-name>jmsResources</conn:resourceadapter-name>
> <conn:config-property-setting
> name="ServerUrl">tcp://localhost:61616?keepAlive=true&jms.copyMessageOnSend=false&jms.watchTopicAdvisories=false&socket.tcpNoDelay=true&wireFormat.tcpNoDelayEnabled=true</conn:config-property-setting>
> <nam:workmanager>
> <nam:gbean-link>DefaultWorkManager</nam:gbean-link>
> </nam:workmanager>
> </conn:resourceadapter-instance>
> <conn:outbound-resourceadapter>
> <conn:connection-definition>
>
> <conn:connectionfactory-interface>javax.jms.ConnectionFactory</conn:connectionfactory-interface>
> <conn:connectiondefinition-instance>
> <conn:name>jmsCF</conn:name>
>
> <conn:implemented-interface>javax.jms.QueueConnectionFactory</conn:implemented-interface>
> <conn:connectionmanager>
> <conn:xa-transaction>
> <conn:transaction-caching />
> </conn:xa-transaction>
> <conn:single-pool>
> <conn:max-size>150</conn:max-size>
> <conn:min-size>70</conn:min-size>
>
> <conn:blocking-timeout-milliseconds>30000</conn:blocking-timeout-milliseconds>
> <conn:match-one />
> </conn:single-pool>
> </conn:connectionmanager>
> </conn:connectiondefinition-instance>
> </conn:connection-definition>
> </conn:outbound-resourceadapter>
> </conn:resourceadapter>
>
the 1.5 GB objects are almost from the HashMaps, holding ActiveMQTempQueue,
referenced by those ActiveMQConnection.
what I cannot understand is that why those ActiveMQTempQueue are always
there even I close the connection.
I am trying to run different application on different JVM and let them
send/reply messages to/from each other, therefore I use TCP transport. Can I
use VM Transport across JVM, did I misunderstand the meaning of transport?
Ivan Pechorin wrote:
>
> Hello,
>
> 2010/4/29 easyl <ea...@gmail.com>:
>> AMQ 5.3 in Geronimo 2.2
>>
>> I found ActiveMQConnection always hold the ActiveMQTempQueue and should
>> lead
>> to memory leak,
>> especially using massive send/reply through temp queues.
>>
>> I create a ticket here https://issues.apache.org/activemq/browse/AMQ-2716
>
> There is something I don't get: in the ticket you wrote:
> 1) "the ActiveMQConnections are pooled"? and
> 2) "The 1.5G ActiveMQConnection objects and their referencing objects
> stay in heap old generation and cannot be cleaned by GC."
>
> If you do really pool your connections, how do you manage to create
> the 1.5 GB of connection objects?
>
> By the way, why do you use TCP transport for connection to embedded
> ActiveMQ? Why not use VM transport, designed for exactly this purpose?
>
> Best regards, Ivan
>
>
--
View this message in context: http://old.nabble.com/ActiveMQConnection-leaks-memory-by-caching-ActiveMQTempQueue-objects-tp28397951p28398408.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.
Re: ActiveMQConnection leaks memory by caching ActiveMQTempQueue
objects
Posted by Ivan Pechorin <iv...@gmail.com>.
> what I cannot understand is that why those ActiveMQTempQueue are always
> there even I close the connection.
Because the connection is not closed actually, it is just returned to the pool.
If I understand correctly, the following kinds of ActiveMQ objects
involve sync request to ActiveMQ broker each time they are created:
1) connection
2) session
3) destination
4) producer
5) consumer
Therefore, we pool all of these objects, not just connections.