activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From HU <gong...@hotmail.com>
Subject Re: Broker used up the memory
Date Fri, 29 Sep 2006 05:55:18 GMT

Hi, I ran the test with youkit profiler and got the memory snapshot files
about every 3 minutes.
Please find the upload files.


James.Strachan wrote:
> 
> Is just the consumer running in the JVM and the broker & producer are
> seperate? If you think you've found some kind of memory leak, please
> run a profiler to help us figure out whats going on.
> 
> On 9/28/06, HU <gong_pu@hotmail.com> wrote:
>>
>> Hi, James.
>>
>> Our system have to continue to keep the running  one  month or more long
>> term without any memory leaks.
>>
>> Yesterday's test was interrupted due to the memory leak(OutOfMemory) on
>> the
>> consumer thread side after I changed the java heap to -Xmx512K.
>>
>> Now I began a new test following the prefetch limit.
>> I changed the code:
>> destinetionQueue = session.createQueue("RequestQueue");
>> to
>> destinetionQueue = New
>> ActiveMQQueue("RequestQueue?consumer.prefetchSize=1");
>> .
>> The test is running now, but the GC tell me the heap is used slowing
>> up...
>>
>>
>>
>> James.Strachan wrote:
>> >
>> > A consumer will use a readonable amount of RAM due to the prefetch
>> > bufffer...
>> >
>> >
>> http://incubator.apache.org/activemq/what-is-the-prefetch-limit-for.html
>> >
>> > if you are worried about RAM usage for a consumer, set the prefetch to
>> 1
>> >
>> > On 9/27/06, HU <gong_pu@hotmail.com> wrote:
>> >>
>> >>
>> >> OK, I will let it run to dead.
>> >>
>> >> It has already run about 7Hours and send 7300 messages between Sender
>> and
>> >> consumer.
>> >> Now, It is still running..
>> >> The used heap by Consumer is up to 2.5M by GC.
>> >>
>> >>
>> >> James.Strachan wrote:
>> >> >
>> >> > How long do you run your system for? Try send about 10,000 messages
>> >> > through the system, then monitor the memory and see if there's a
>> leak.
>> >> >
>> >> > On 9/27/06, HU <gong_pu@hotmail.com> wrote:
>> >> >>
>> >> >> Hi, James.
>> >> >>
>> >> >> Thanks, I have had the broker run with Mysql DB.
>> >> >>
>> >> >> Then I run the broker and a sender on a PC and run a consumer on
>> >> another
>> >> >> PC,
>> >> >> Send a message to a queue by the sender thread and receve the
>> messsage
>> >> by
>> >> >> the consumer thread then reply a message to sender thread by the
>> >> >> consumer,
>> >> >> repeat the actions.
>> >> >> I found the heap was used creep up and did not found the used
>> memory
>> >> be
>> >> >> released by the consumer thread. I used GC to get tracing for the
>> >> test.
>> >> >> Following are the codes of my test, could you please help me to
fix
>> >> the
>> >> >> issue.
>> >> >>
>> >> >> public class Newconsumer extends Thread{
>> >> >>     private Session         session;
>> >> >>     private Connection      connection;
>> >> >>     private MessageConsumer consumer;
>> >> >>     private Destination     destinetionQueue;
>> >> >>     public Newconsumer(Connection con) {
>> >> >>         this.connection = con;
>> >> >>         try {
>> >> >>             session = this.connection.createSession(true,
>> >> >> Session.AUTO_ACKNOWLEDGE);
>> >> >>             destinetionQueue = session.createQueue("RequestQueue");
>> >> >>             consumer = session.createConsumer(destinetionQueue);
>> >> >>         } catch (JMSException e) { }
>> >> >>     }
>> >> >>
>> >> >>     public void close() {
>> >> >>         try {
>> >> >>                 if( consumer != null ) consumer.close();
>> >> >>             if (session != null) session.close();
>> >> >>         } catch (JMSException e) {  e.printStackTrace(); }
>> >> >>     }
>> >> >>
>> >> >>     public void run() {
>> >> >>         while(true){
>> >> >>             try {
>> >> >>                 Message msg = consumer.receive(10000);
>> >> >>                 if ( msg == null ) continue;
>> >> >>                 Destination destResp = ((MapMessage)
>> >> msg).getJMSReplyTo()
>> >> >> ;
>> >> >>                 String sCorrelationID = ((MapMessage)
>> >> >> msg).getJMSCorrelationID();
>> >> >>                 String sAnkenID = ((MapMessage)
>> msg).getString("ID");
>> >> >>                 Session sessSend = this.connection.createSession(
>> >> false,
>> >> >> Session.AUTO_ACKNOWLEDGE);
>> >> >>                 MapMessage msgTime = sessSend.createMapMessage();
>> >> >>                 msgTime.setJMSCorrelationID( sCorrelationID);
>> >> >>                 msgTime.setString( "ID",sAnkenID);
>> >> >>                 msgTime.setLong("TIMEOUT",35000 );
>> >> >>                 MessageProducer producer =
>> >> >> sessSend.createProducer(destResp);
>> >> >>                 producer.send(msgTime);
>> >> >>                 MapMessage msgRes = session.createMapMessage();
>> >> >>                 msgRes.setJMSCorrelationID( sCorrelationID);
>> >> >>                 msgRes.setString( "ID",sAnkenID);
>> >> >>                 msgRes.setString( "RESULT","SUCCESS");
>> >> >>                 producer.send(msgRes);
>> >> >>                 this.session.commit();
>> >> >>                 producer.close();
>> >> >>                 producer=null;
>> >> >>                 sessSend.close();
>> >> >>                 sessSend=null;
>> >> >>
>> >> >>             } catch (JMSException e) { e.printStackTrace(); }
>> >> >>             break;
>> >> >>         }
>> >> >>         this.close();
>> >> >>     }
>> >> >> }
>> >> >>
>> >> >> public class ConsumerController {
>> >> >>         public static Newconsumer consumer;
>> >> >>
>> >> >>     public static void main(String[] args) throws NamingException
{
>> >> >>         ActiveMQConnectionFactory factory;
>> >> >>         Connection                connAnken;
>> >> >>         factory = new
>> >> ActiveMQConnectionFactory("tcp://localhost:61616");
>> >> >>         try {
>> >> >>             connAnken = factory.createQueueConnection();
>> >> >>             connAnken.start();
>> >> >>             consumer = new Newconsumer(connAnken);
>> >> >>                 consumer.start() ;
>> >> >>             try {
>> >> >>                      while(true) {
>> >> >>                          consumer.join();
>> >> >>                          consumer =null;
>> >> >>                          consumer = new Newconsumer(connAnken);
>> >> >>                          consumer.start();
>> >> >>                      }
>> >> >>             } catch (Throwable e) {
>> >> >>                 e.printStackTrace();
>> >> >>             } finally{
>> >> >>                 connAnken.close() ;
>> >> >>                 connAnken=null;
>> >> >>             }
>> >> >>         } catch (Throwable e) { e.printStackTrace(); }
>> >> >>     }
>> >> >> }
>> >> >>
>> >> >>
>> >> >> activemq.xml
>> >> >>
>> >>
>> ------------------------------------------------------------------------------------------
>> >> >> <!-- START SNIPPET: example -->
>> >> >> <beans xmlns="http://activemq.org/config/1.0">
>> >> >>   <bean
>> >> >>
>> >>
>> class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
>> >> >>   <broker useJmx="true">
>> >> >>     <destinationPolicy>
>> >> >>       <policyMap><policyEntries>
>> >> >>           <policyEntry topic="FOO.>">
>> >> >>             <dispatchPolicy>
>> >> >>               <strictOrderDispatchPolicy />
>> >> >>             </dispatchPolicy>
>> >> >>             <subscriptionRecoveryPolicy>
>> >> >>               <lastImageSubscriptionRecoveryPolicy />
>> >> >>             </subscriptionRecoveryPolicy>
>> >> >>           </policyEntry>
>> >> >>       </policyEntries></policyMap>
>> >> >>     </destinationPolicy>
>> >> >>     <persistenceAdapter>
>> >> >>       <journaledJDBC journalLogFiles="5"
>> >> >> dataDirectory="../activemq-data-0926" dataSource="#mysql-ds"/>
>> >> >>     </persistenceAdapter>
>> >> >>     <transportConnectors>
>> >> >>        <transportConnector name="default"
>> uri="tcp://localhost:61616"
>> >> >> discoveryUri="multicast://default"/>
>> >> >>        <transportConnector name="stomp"
>> >> uri="stomp://localhost:61613"/>
>> >> >>     </transportConnectors>
>> >> >>     <networkConnectors>
>> >> >>       <networkConnector name="default" uri="multicast://default"/>
>> >> >>     </networkConnectors>
>> >> >>   </broker>
>> >> >>   <bean id="mysql-ds"
>> class="org.apache.commons.dbcp.BasicDataSource"
>> >> >> destroy-method="close">
>> >> >>     <property name="driverClassName"
>> value="com.mysql.jdbc.Driver"/>
>> >> >>     <property name="url"
>> >> >> value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
>> >> >>     <property name="username" value="activemq"/>
>> >> >>     <property name="password" value="activemq"/>
>> >> >>     <property name="poolPreparedStatements" value="true"/>
>> >> >>   </bean>
>> >> >>
>> >> >> </beans>
>> >> >> <!-- END SNIPPET: example -->
>> >> >>
>> >> >> eclipse.ini
>> >> >>
>> >>
>> ------------------------------------------------------------------------------------------
>> >> >> -vmargs
>> >> >> -Xms128M
>> >> >> -Xmx512M
>> >> >> -XX:PermSize=64M
>> >> >> -XX:MaxPermSize=128M
>> >> >>
>> >> >> Thanks,
>> >> >> Hu
>> >> >> --
>> >> >> View this message in context:
>> >> >>
>> >>
>> http://www.nabble.com/Broker-used-up-the-memory-tf2316972.html#a6523894
>> >> >> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>> >> >>
>> >> >>
>> >> >
>> >> >
>> >> > --
>> >> >
>> >> > James
>> >> > -------
>> >> > http://radio.weblogs.com/0112098/
>> >> >
>> >> >
>> >>
>> >> --
>> >> View this message in context:
>> >>
>> http://www.nabble.com/Broker-used-up-the-memory-tf2316972.html#a6524501
>> >> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>> >>
>> >>
>> >
>> >
>> > --
>> >
>> > James
>> > -------
>> > http://radio.weblogs.com/0112098/
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Broker-used-up-the-memory-tf2316972.html#a6539530
>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>
>>
> 
> 
> -- 
> 
> James
> -------
> http://radio.weblogs.com/0112098/
> 
> 
http://www.nabble.com/file/225/SendToJames.zip SendToJames.zip 
-- 
View this message in context: http://www.nabble.com/Broker-used-up-the-memory-tf2316972.html#a6559766
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Mime
View raw message