activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sam Parsons (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (AMQCPP-510) Consumer leaks memory with failover and checkForDuplicates=true
Date Tue, 10 Sep 2013 15:04:52 GMT

     [ https://issues.apache.org/jira/browse/AMQCPP-510?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Sam Parsons updated AMQCPP-510:
-------------------------------

    Description: 
The example application (examples/main.cpp) leaks memory in the consumer. 

To reproduce the problem, add a usleep(100000) after the producer->send, set useTopics
= false and numMessages = 2000000.

With the following url, the example application remains on 4% CPU and 15 meg of memory on
my development machine: 

"failover:(tcp://localhost:61616)?connection.checkForDuplicates=false" 

Without the "checkForDuplicates=false" the cpu and memory usage grows constantly. I eventually
stopped it at 100% CPU and 340 meg of memory. 

Valgrind suggested that the leak was in ConnectionAudit.cpp:100. I added the following debug:


{noformat}
try { 
  audit = this->impl->destinations.get(destination); 
} catch (NoSuchElementException& ex) { 
  audit.reset(new ActiveMQMessageAudit(auditDepth,auditMaximumProducerNumber)); 
  this->impl->destinations.put(destination, audit); 
  std::cout << "New destination audit: " << destination->toString() 
            << ", size: " << this->impl->destinations.keySet().size() <<
std::endl; 
} 
{noformat}

...and it prints... 

{noformat}
Sent message #410 from thread 140736021874568 
New destination audit: queue://TEST.FOO, size: 410 
Message #410 Received: Hello world! from thread 140736021874568 
Sent message #411 from thread 140736021874568 
New destination audit: queue://TEST.FOO, size: 411 
Message #411 Received: Hello world! from thread 140736021874568 
{noformat}

So the size of the destinations map keeps increasing. It seems to think every message has
a new destination, but this is not the case. It's just the example code in main.cpp which
creates the TEST.FOO destination and sends messages to it in a loop. 

I tested 3.7.0, 3.7.1 and 3.8.0 and the problem is in all of these versions. 3.4.4 does not
have this problem, but that version does not have duplicates detection so that's probably
why.

  was:
The example application (examples/main.cpp) leaks memory in the consumer. 

To reproduce the problem, add a usleep(100000) after the producer->send, set useTopics
= false and numMessages = 2000000.

With the following url, the example application remains on 4% CPU and 15 meg of memory on
my development machine: 

"failover:(tcp://localhost:61616)?connection.checkForDuplicates=false" 

Without the "checkForDuplicates=false" the cpu and memory usage grows constantly. I eventually
stopped it at 100% CPU and 340 meg of memory. 

Valgrind suggested that the leak was in ConnectionAudit.cpp:100. I added the following debug:


try { 
  audit = this->impl->destinations.get(destination); 
} catch (NoSuchElementException& ex) { 
  audit.reset(new ActiveMQMessageAudit(auditDepth,auditMaximumProducerNumber)); 
  this->impl->destinations.put(destination, audit); 
  std::cout << "New destination audit: " << destination->toString() 
            << ", size: " << this->impl->destinations.keySet().size() <<
std::endl; 
} 

...and it prints... 

Sent message #410 from thread 140736021874568 
New destination audit: queue://TEST.FOO, size: 410 
Message #410 Received: Hello world! from thread 140736021874568 
Sent message #411 from thread 140736021874568 
New destination audit: queue://TEST.FOO, size: 411 
Message #411 Received: Hello world! from thread 140736021874568 

So the size of the destinations map keeps increasing. It seems to think every message has
a new destination, but this is not the case. It's just the example code in main.cpp which
creates the TEST.FOO destination and sends messages to it in a loop. 

I tested 3.7.0, 3.7.1 and 3.8.0 and the problem is in all of these versions. 3.4.4 does not
have this problem, but that version does not have duplicates detection so that's probably
why.

    
> Consumer leaks memory with failover and checkForDuplicates=true
> ---------------------------------------------------------------
>
>                 Key: AMQCPP-510
>                 URL: https://issues.apache.org/jira/browse/AMQCPP-510
>             Project: ActiveMQ C++ Client
>          Issue Type: Bug
>          Components: CMS Impl
>    Affects Versions: 3.7.0, 3.7.1, 3.8.0
>         Environment: Linux x86/64 (ubuntu)
>            Reporter: Sam Parsons
>            Assignee: Timothy Bish
>
> The example application (examples/main.cpp) leaks memory in the consumer. 
> To reproduce the problem, add a usleep(100000) after the producer->send, set useTopics
= false and numMessages = 2000000.
> With the following url, the example application remains on 4% CPU and 15 meg of memory
on my development machine: 
> "failover:(tcp://localhost:61616)?connection.checkForDuplicates=false" 
> Without the "checkForDuplicates=false" the cpu and memory usage grows constantly. I eventually
stopped it at 100% CPU and 340 meg of memory. 
> Valgrind suggested that the leak was in ConnectionAudit.cpp:100. I added the following
debug: 
> {noformat}
> try { 
>   audit = this->impl->destinations.get(destination); 
> } catch (NoSuchElementException& ex) { 
>   audit.reset(new ActiveMQMessageAudit(auditDepth,auditMaximumProducerNumber)); 
>   this->impl->destinations.put(destination, audit); 
>   std::cout << "New destination audit: " << destination->toString() 
>             << ", size: " << this->impl->destinations.keySet().size()
<< std::endl; 
> } 
> {noformat}
> ...and it prints... 
> {noformat}
> Sent message #410 from thread 140736021874568 
> New destination audit: queue://TEST.FOO, size: 410 
> Message #410 Received: Hello world! from thread 140736021874568 
> Sent message #411 from thread 140736021874568 
> New destination audit: queue://TEST.FOO, size: 411 
> Message #411 Received: Hello world! from thread 140736021874568 
> {noformat}
> So the size of the destinations map keeps increasing. It seems to think every message
has a new destination, but this is not the case. It's just the example code in main.cpp which
creates the TEST.FOO destination and sends messages to it in a loop. 
> I tested 3.7.0, 3.7.1 and 3.8.0 and the problem is in all of these versions. 3.4.4 does
not have this problem, but that version does not have duplicates detection so that's probably
why.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message