1 2 Previous Next 24 Replies Latest reply on Aug 19, 2014 5:15 AM by rsinghal Go to original post
      • 15. Re: Memory leak with clustered JMS Server
        rsinghal

        Hi Mirek,

         

        I am still struggling to find any clue from the debug logs but it seems that it continous logging that node is going up:

         

        06:07:17,959 DEBUG [org.hornetq.core.client] (default-threads - 17) Reconnection successfull

        06:07:17,960 DEBUG [org.hornetq.core.client] (default-threads - 17) NettyConnector [host=10.10.52.246, port=5445, httpEnabled=false, useServlet=false, servletPath=/messaging/HornetQServlet, sslEnabled=false, useNio=false] host 1: 10.10.52.115 ip address: 10.10.52.115 host 2: 10.10.52.246 ip address: 10.10.52.246

        06:07:17,959 DEBUG [org.hornetq.core.client] (default-threads - 8) Reconnection successfull

        06:07:17,959 DEBUG [org.hornetq.core.client] (Old I/O server worker (parentId: -724172059, [id: 0xd4d602e5, /10.10.52.246:5445])) Topology@c18c7e1[owner=ClusterConnectionImpl@1630353650[nodeUUID=0f746069-f52b-11e2-b02a-8bee9fa4e9b9, connector=TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=10-10-52-246, address=jms, server=HornetQServerImpl::serverUUID=0f746069-f52b-11e2-b02a-8bee9fa4e9b9]] is sending topology to Remote Proxy on channel 37389a2f

        06:07:17,958 DEBUG [org.hornetq.core.client] (Thread-32 (HornetQ-client-global-threads-1266216150)) Node 776131b0-f422-11e2-9dfc-cfc70000de9f going up, connector = Pair[a=TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=10-10-52-246, b=null], isLast=false csf created at

        serverLocator=ServerLocatorImpl [initialConnectors=[TransportConfiguration(name=2156ede6-f52b-11e2-b02a-8bee9fa4e9b9, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=JMSServer1, TransportConfiguration(name=2156ede7-f52b-11e2-b02a-8bee9fa4e9b9, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=JMSServer2], discoveryGroupConfiguration=null]: java.lang.Exception

                  at org.hornetq.core.client.impl.ClientSessionFactoryImpl.<init>(ClientSessionFactoryImpl.java:197) [hornetq-core-client-2.3.0.CR1.jar:]

                  at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:808) [hornetq-core-client-2.3.0.CR1.jar:]

                  at org.hornetq.ra.inflow.HornetQActivation.setup(HornetQActivation.java:311)

                  at org.hornetq.ra.inflow.HornetQActivation$SetupActivation.run(HornetQActivation.java:701)

                  at org.jboss.jca.core.workmanager.WorkWrapper.run(WorkWrapper.java:218)

                  at org.jboss.threads.SimpleDirectExecutor.execute(SimpleDirectExecutor.java:33)

                  at org.jboss.threads.QueueExecutor.runTask(QueueExecutor.java:806)

                  at org.jboss.threads.QueueExecutor.access$100(QueueExecutor.java:45)

                  at org.jboss.threads.QueueExecutor$Worker.run(QueueExecutor.java:826)

                  at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_04]

                  at org.jboss.threads.JBossThread.run(JBossThread.java:122)

         

         

        06:07:17,960 DEBUG [org.hornetq.core.client] (Old I/O server worker (parentId: -724172059, [id: 0xd4d602e5, /10.10.52.246:5445])) Topology@c18c7e1[owner=ClusterConnectionImpl@1630353650[nodeUUID=0f746069-f52b-11e2-b02a-8bee9fa4e9b9, connector=TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=10-10-52-246, address=jms, server=HornetQServerImpl::serverUUID=0f746069-f52b-11e2-b02a-8bee9fa4e9b9]] is sending topology to Remote Proxy on channel 77fe8305

        06:07:17,960 DEBUG [org.hornetq.core.client] (default-threads - 8) NettyConnector [host=10.10.52.246, port=5445, httpEnabled=false, useServlet=false, servletPath=/messaging/HornetQServlet, sslEnabled=false, useNio=false] host 1: 10.10.52.115 ip address: 10.10.52.115 host 2: 10.10.52.246 ip address: 10.10.52.246

        06:07:17,960 DEBUG [org.hornetq.core.client] (default-threads - 17) ClientSessionFactoryImpl received backup update for live/backup pair = TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=10-10-52-246 / null but it didn't belong to TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=10-10-52-246

        06:07:17,961 DEBUG [org.hornetq.ra] (default-threads - 21) Using queue connection DelegatingSession [session=ClientSessionImpl [name=221ef91d-f52b-11e2-b02a-8bee9fa4e9b9, username=null, closed=false, factory = ClientSessionFactoryImpl [serverLocator=ServerLocatorImpl [initialConnectors=[TransportConfiguration(name=215714f8-f52b-11e2-b02a-8bee9fa4e9b9, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=JMSServer1, TransportConfiguration(name=215714f9-f52b-11e2-b02a-8bee9fa4e9b9, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=JMSServer2], discoveryGroupConfiguration=null], connectorConfig=TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=10-10-52-246, backupConfig=null], metaData=()]@7c484e61]

        06:07:17,961 DEBUG [org.hornetq.core.client] (Thread-83 (HornetQ-client-global-threads-1266216150)) Node 0f746069-f52b-11e2-b02a-8bee9fa4e9b9 going up, connector = Pair[a=TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=10-10-52-246, b=null], isLast=false csf created at

        serverLocator=ServerLocatorImpl [initialConnectors=[TransportConfiguration(name=215455b2-f52b-11e2-b02a-8bee9fa4e9b9, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=JMSServer1, TransportConfiguration(name=215455b3-f52b-11e2-b02a-8bee9fa4e9b9, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=JMSServer2], discoveryGroupConfiguration=null]: java.lang.Exception

                  at org.hornetq.core.client.impl.ClientSessionFactoryImpl.<init>(ClientSessionFactoryImpl.java:197) [hornetq-core-client-2.3.0.CR1.jar:]

                  at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:808) [hornetq-core-client-2.3.0.CR1.jar:]

                  at org.hornetq.ra.inflow.HornetQActivation.setup(HornetQActivation.java:311)

                  at org.hornetq.ra.inflow.HornetQActivation$SetupActivation.run(HornetQActivation.java:701)

                  at org.jboss.jca.core.workmanager.WorkWrapper.run(WorkWrapper.java:218)

                  at org.jboss.threads.SimpleDirectExecutor.execute(SimpleDirectExecutor.java:33)

                  at org.jboss.threads.QueueExecutor.runTask(QueueExecutor.java:806)

                  at org.jboss.threads.QueueExecutor.access$100(QueueExecutor.java:45)

                  at org.jboss.threads.QueueExecutor$Worker.run(QueueExecutor.java:826)

                  at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_04]

                  at org.jboss.threads.JBossThread.run(JBossThread.java:122)

         

        Could you please share your test configuration where it is working? I'll check against my configuration.

         

        Thanks,

        Ravi

        • 16. Re: Memory leak with clustered JMS Server
          mnovak

          Hi Ravi,

           

          sorry for late reply. I had a vacation. Here is my configuration.

           

          Server 1:

          <subsystem xmlns="urn:jboss:domain:messaging:1.3">
                      <hornetq-server>
                          <persistence-enabled>true</persistence-enabled>
                          <security-enabled>false</security-enabled>
                          <cluster-password>${jboss.messaging.cluster.password:CHANGE ME!!}</cluster-password>
                          <shared-store>true</shared-store>
                          <journal-type>ASYNCIO</journal-type>
                          <journal-file-size>10485760</journal-file-size>
                          <journal-min-files>2</journal-min-files>
          
                          <connectors>
                              <netty-connector name="netty" socket-binding="messaging"/>
                              <netty-connector name="netty-throughput" socket-binding="messaging-throughput">
                                  <param key="batch-delay" value="50"/>
                              </netty-connector>
                              <in-vm-connector name="in-vm" server-id="0"/>
                          </connectors>
          
                          <acceptors>
                              <netty-acceptor name="netty" socket-binding="messaging"/>
                              <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput">
                                  <param key="batch-delay" value="50"/>
                                  <param key="direct-deliver" value="false"/>
                              </netty-acceptor>
                              <in-vm-acceptor name="in-vm" server-id="0"/>
                          </acceptors>
          
                          <broadcast-groups>
                              <broadcast-group name="bg-group1">
                                  <socket-binding>messaging-group</socket-binding>
                                  <broadcast-period>2000</broadcast-period>
                                  <connector-ref>
                                      netty
                                  </connector-ref>
                              </broadcast-group>
                          </broadcast-groups>
          
                          <discovery-groups>
                              <discovery-group name="dg-group1">
                                  <socket-binding>messaging-group</socket-binding>
                                  <refresh-timeout>10000</refresh-timeout>
                              </discovery-group>
                          </discovery-groups>
          
                          <cluster-connections>
                              <cluster-connection name="my-cluster">
                                  <address>jms</address>
                                  <connector-ref>netty</connector-ref>
                                  <retry-interval>1000</retry-interval>
                                  <use-duplicate-detection>true</use-duplicate-detection>
                                  <forward-when-no-consumers>false</forward-when-no-consumers>
                                  <max-hops>1</max-hops>
                                  <discovery-group-ref discovery-group-name="dg-group1"/>
                              </cluster-connection>
                          </cluster-connections>
          
                          <security-settings>
                              <security-setting match="#">
                                  <permission type="send" roles="guest"/>
                                  <permission type="consume" roles="guest"/>
                                  <permission type="createNonDurableQueue" roles="guest"/>
                                  <permission type="deleteNonDurableQueue" roles="guest"/>
                              </security-setting>
                          </security-settings>
          
                          <address-settings>
                              <address-setting match="#">
                                  <redelivery-delay>0</redelivery-delay>
                                  <max-size-bytes>52428800</max-size-bytes>
                                  <page-size-bytes>1048576</page-size-bytes>
                                  <address-full-policy>PAGE</address-full-policy>
                                  <redistribution-delay>0</redistribution-delay>
                              </address-setting>
                          </address-settings>
          
                          <jms-connection-factories>
                              <connection-factory name="InVmConnectionFactory">
                                  <connectors>
                                      <connector-ref connector-name="in-vm"/>
                                  </connectors>
                                  <entries>
                                      <entry name="java:/ConnectionFactory"/>
                                  </entries>
                              </connection-factory>
                              <connection-factory name="RemoteConnectionFactory">
                                  <connectors>
                                      <connector-ref connector-name="netty"/>
                                  </connectors>
                                  <entries>
                                      <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
                                  </entries>
                              </connection-factory>
                              <pooled-connection-factory name="hornetq-ra">
                                  <transaction mode="xa"/>
                                  <connectors>
                                      <connector-ref connector-name="in-vm"/>
                                  </connectors>
                                  <entries>
                                      <entry name="java:/JmsXA"/>
                                  </entries>
                              </pooled-connection-factory>
                          </jms-connection-factories>
          
                          <jms-destinations>
                              <jms-queue name="testQueue0">
                                  <entry name="jms/queue/testQueue0"/>
                                  <entry name="java:jboss/exported/jms/queue/testQueue0"/>
                                  <durable>true</durable>
                              </jms-queue>
                              <jms-queue name="testQueue1">
                                  <entry name="jms/queue/testQueue1"/>
                                  <entry name="java:jboss/exported/jms/queue/testQueue1"/>
                                  <durable>true</durable>
                              </jms-queue>
                              <jms-queue name="InQueue">
                                  <entry name="jms/queue/InQueue"/>
                                  <entry name="java:jboss/exported/jms/queue/InQueue"/>
                                  <durable>true</durable>
                              </jms-queue>
                              <jms-queue name="OutQueue">
                                  <entry name="jms/queue/OutQueue"/>
                                  <entry name="java:jboss/exported/jms/queue/OutQueue"/>
                                  <durable>true</durable>
                              </jms-queue>
                          </jms-destinations>
                      </hornetq-server>
                  </subsystem>
          

           

          Server2 config is the same as above.

           

          Server 3 config with MDB. There is important only configuration of pooled-connection-factory. Also make sure that this server won't create HornetQ cluster with server1 and server2

          <pooled-connection-factory name="hornetq-ra">
                                  <transaction mode="xa"/>
                                  <connectors>
                                      <connector-ref connector-name="netty-remote"/>
                                  </connectors>
                                  <entries>
                                      <entry name="java:/JmsXA"/>
                                  </entries>
          </pooled-connection-factory>
          
          <connectors>
                             ...
                              <netty-connector name="netty-remote" socket-binding="messaging-remote"/>
                             ...
          </connectors>
          
          <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
          ...
                    <outbound-socket-binding name="messaging-remote">
                      <remote-destination host="192.168.40.1" port="5445"/>
                     </outbound-socket-binding>
          ...
          </socket-binding-group>
          

           

          Code of MDB:

          package org.jboss.qa.hornetq.apps.mdb;
          
          import org.apache.log4j.Level;
          import org.apache.log4j.Logger;
          
          import javax.annotation.Resource;
          import javax.ejb.*;
          import javax.jms.*;
          import java.util.concurrent.atomic.AtomicInteger;
          
          /**
           * A MdbWithRemoteOutQueueToContaniner1 used in RemoteJcaTestCase.
           * This mdb reads messages from queue "InQueue" and sends to queue "OutQueue".
           */
          @MessageDriven(name = "mdb1",
                  activationConfig = {
                          @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
                          @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/queue/InQueue")})
          @TransactionManagement(value = TransactionManagementType.CONTAINER)
          @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
          public class    MdbWithRemoteOutQueueToContaniner1 implements MessageListener {
          
              private static final long serialVersionUID = 2770941392406343837L;
              private static final Logger log = Logger.getLogger(MdbWithRemoteOutQueueToContaniner1.class.getName());
              private Queue queue = null;
              public static AtomicInteger numberOfProcessedMessages= new AtomicInteger();
          
              @Resource(mappedName = "java:/JmsXA")
              private ConnectionFactory cf;
          
              @Resource
              private MessageDrivenContext context;
          
              @Override
              public void onMessage(Message message) {
          
                  Connection con = null;
                  Session session = null;
          
                  try {
          
                      long time = System.currentTimeMillis();
                      int counter = 0;
                      try {
                          counter = message.getIntProperty("count");
                      } catch (Exception e) {
                          log.log(Level.ERROR, e.getMessage(), e);
                      }
          
                      String messageInfo = message.getJMSMessageID() + ", count:" + counter;
          
                      log.debug(" Start of message:" + messageInfo);
          
                      for (int i = 0; i < (5 + 5 * Math.random()); i++) {
                          try {
                              Thread.sleep((int) (10 + 10 * Math.random()));
                          } catch (InterruptedException ex) {
                          }
                      }
          
                      con = cf.createConnection();
          
                      session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
          
                      if (queue == null)  {
                          queue = session.createQueue("OutQueue");
                      }
          
                      con.start();
          
                      String text = message.getJMSMessageID() + " processed by: " + hashCode();
                      MessageProducer sender = session.createProducer(queue);
                      TextMessage newMessage = session.createTextMessage(text);
                      newMessage.setStringProperty("inMessageId", message.getJMSMessageID());
                      newMessage.setStringProperty("_HQ_DUPL_ID", message.getStringProperty("_HQ_DUPL_ID"));
                      sender.send(newMessage);
          
                      messageInfo = messageInfo + ". Sending new message with inMessageId: " + newMessage.getStringProperty("inMessageId")
                              + " and messageId: " + newMessage.getJMSMessageID();
          
                      log.debug("End of " + messageInfo + " in " + (System.currentTimeMillis() - time) + " ms");
          
                      if (numberOfProcessedMessages.incrementAndGet() % 100 == 0) log.info(messageInfo + " in " + (System.currentTimeMillis() - time) + " ms");
          
                  } catch (Exception t) {
                      log.error(t.getMessage(), t);
                      this.context.setRollbackOnly();
                  } finally {
          
                      if (con != null) {
                          try {
                              con.close();
                          } catch (JMSException e) {
                              log.log(Level.FATAL, e.getMessage(), e);
                          }
                      }
                  }
              }
          }
          

           

          Attribute reconnect-attempts is not set is by default  -1 which means reconnect indefinitely. Attribute setup-attempts is not set and should have default value 10. There is no other activation-config property set for MDB.

           

          Cheers,

           

          Mirek

          • 17. Re: Memory leak with clustered JMS Server
            rsinghal

            No problem Mirek, just curious in your configuration for netty-remote connector, you are pointing it to only one messaging server? Additionally in configuration of Server 1 and 2 Clustered = true is not set?

             

            In my configuration, all 3 servers are forming cluster? Could that be a problem?

            • 18. Re: Memory leak with clustered JMS Server
              mnovak

              Configuration is from AS 7.2/EAP 6.1 where attribute clustered was depracated and is ignored. Just setting <cluster-connections> is enough to create cluster. I have disabled security so no <cluster-password> is needed.

               

              I've configured "netty-remote" connector to one node in cluster but it's possible to create second one for the other node and put to <connectors> for configuration of <pooled-connection-factory>.

               

              As far as I know HornetQ RA on 3rd server load balances connections to all nodes in cluster. If RA connects to node(3rd server is actually connecting to itself) where expected queues/topics are not deployed then there might be issues.

               

              Could you try to remove cluster-connections, broadcast-groups and discovery-groups from configuration of 3rd server?

               

              Thanks,

               

              Mirek

              • 19. Re: Memory leak with clustered JMS Server
                rsinghal

                I tried this configuration earlier and it doesn't go OOM with that but RA doesn't connect to second server if first one is stopped. It seems that it connects to only one HornetQ Server. I am sure I missed something in configuration. You mean that I should create two netty-remote connectors and put them in pooled-connection-factory. Is there a way to achieve this through auto-discovery? We don't want to have server names in MDB server standalone.xml file.

                 

                Thanks,

                Ravi

                • 20. Re: Memory leak with clustered JMS Server
                  mnovak

                  This should do the magic with auto discovery:

                  <pooled-connection-factory name="hornetq-ra">
                                          <transaction mode="xa"/>
                                          <discovery-group-ref discovery-group-name="dg-group1"/>
                                          <entries>
                                              <entry name="java:/JmsXA"/>
                                          </entries>
                  </pooled-connection-factory>
                  

                   

                  where "dg-group1" is pretty much default:

                  <discovery-groups>
                                      <discovery-group name="dg-group1">
                                          <socket-binding>messaging-group</socket-binding>
                                          <refresh-timeout>10000</refresh-timeout>
                                      </discovery-group>
                  </discovery-groups>
                  

                   

                  I'm still not able to reproduce the issue. Could you share your configuration of servers, please?

                   

                  Thanks,

                   

                  Mirek

                  1 of 1 people found this helpful
                  • 21. Re: Memory leak with clustered JMS Server
                    rsinghal

                    Hey Mirek, I have pasted my messaging subsystem configuration in 3rd comment: https://community.jboss.org/thread/230250?start=3&tstart=0

                     

                    Actually, I have the same messaging susbsytem configuration on all 3 machines i.e. machine where MDBs are deployed, is also a part of cluster and there is default pooles-connection-factory configuration (no additional connector or discovery group reference defined). It is using inVM netty connector which could be causing this error.

                     

                    I'll try with your configuration.

                     

                    Thanks,

                    Ravi

                    • 22. Re: Memory leak with clustered JMS Server
                      mnovak

                      Hi Ravi,

                       

                      I'm missing where is the queue for MDB deployed. I guess it's using hornetq-jms.xml in META-INF directory in deployment, right? In this case queue deployes only to 3rd server with MDB I guess.

                       

                      Are you using java:/JmsXA connection factory in MDB?

                       

                      I'm still not giving up. Even with bad configuration there should be no OOM.

                       

                      Thanks,

                       

                      Mirek

                      • 23. Re: Memory leak with clustered JMS Server
                        rsinghal

                        Yes, I'm using java:/JmsXA connection factory in MDB and my queues are deployed thorugh standalone.xml. I forgot to paste it in earlier message. I was also thinking that it shouldn't go OOM even with bad configuration and also it shouldn't work if configuration is not right.

                         

                        Additional info: I am trying it on Windows 2008 R2 with JDK 7.

                         

                        Thanks,

                        Ravi

                        • 24. Re: Memory leak with clustered JMS Server
                          rsinghal

                          There is no OOM issue with Linux environment. It means something is wrong with Windows 2008 R2 environment.

                           

                          Edit - I was missing the configuration on server where MDBs were deployed. I made sure that it doesn't form the cluster and it worked fine with suggested changes by Miroslav.

                          1 2 Previous Next