|
|
|
[
Permlink
| « Hide
]
Andrew Lusk - 06/Apr/06 07:51 AM
I have reproduced this problem in svn trunk (previously I was a few weeks behind).
Adding this line:
next.removeDestination(context, AdvisorySupport.getConsumerAdvisoryTopic(info.getDestination()), timeout); below the fireAdvisory call in AdvisoryBroker::removeDestination appears to solve this problem, but at the cost of a very severe performance decrease. Would really appreciate traction from someone more familiar with this particular code. Another solution that I've found to work, with no performance penalty, is to simple not create / send on advisory topics for temporary destinations. I'm not sure if this might break something else internally though.
destinations that don't exist are added by calling the broker stack from the top to add the destination - which we don't need to do for advisories
I got a fresh snapshot of trunk after your latest patch, and tested it with the code I attached above. It still exhibits this memory bloat problem, after several thousand iterations. Did this code work for you with this fix?
Also, the fix that was put in only removes consumer advisory topics, when producer advisory topics are just as much of a problem. The fix will also crash when info == null (when I mentioned putting that line in just after the fireAdvisory call, I meant still within the checked info != null block). The code I provided was a stopgap solution that caused other serious problems for me (and maybe only worked because I was a few weeks back from trunk). In my tree I'm going with the second thing I mentioned (not creating advisory topics for temporary destinations) which is working fine for me while I work on investigating some other issues that have come up with higher numbers of iterations. I've checked in some updates and ran the program through JProfiler - I can't see any memory leaks.
Re - performance - usual practice is to create only a few (1 preferably) temp destination and use selectors - as the creation of any managed resource (consumer/producer/session/connection/destination is heavy compared to sending/selecting messages) correction - there's still a memory leak - gonna track it down
The lines you added in r392929 throw an exception in the broker and crash my ProducerTool on the first iteration, since producer advisory topics and consumer advisory topics are unconditionally closed, when in the case of the above attached code it doesn't create any producers on the temporary topic, only consumers.
Please verify the fix on the above attached ProducerTool with -Dtopic=true and -Dmax=10000. It has always very readily reproduced this problem. INFO Service - Sync error occurred: javax.jms.JMSException: Destination does not exist: topic://ActiveMQ.Advisory.Producer.Topic.ID:andrewlu-33101-1144699546209-0:0:1 Fixed in latest snapshot. I was also able to run your ProducerTool without issue.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||