You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Justin Bertram (JIRA)" <ji...@apache.org> on 2018/01/23 15:18:00 UTC

[jira] [Resolved] (ARTEMIS-1298) Memory leak with apache artemis 2.1.0

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

Justin Bertram resolved ARTEMIS-1298.
-------------------------------------
       Resolution: Fixed
    Fix Version/s:     (was: 2.1.0)
                   2.3.0

> Memory leak with apache artemis 2.1.0
> -------------------------------------
>
>                 Key: ARTEMIS-1298
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-1298
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>          Components: MQTT
>    Affects Versions: 2.1.0
>            Reporter: REGINA Patrick
>            Priority: Major
>             Fix For: 2.3.0
>
>         Attachments: MemoryLeakArtemis.png
>
>
> hi,
> With my broker Mqtt configuration, it seems a memory leak appears after 16 hours.
> Indeed the memory increase but each full GC and GC not release enough memory.
> my JAVA_ARGS=" -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -Xms512M -Xmx2G"
>  
> Please found below my broker.xml :
> {panel:title=My broker.xml}
> {noformat}
> <?xml version='1.0'?>
> <!--
> Licensed to the Apache Software Foundation (ASF) under one
> or more contributor license agreements.  See the NOTICE file
> distributed with this work for additional information
> regarding copyright ownership.  The ASF licenses this file
> to you under the Apache License, Version 2.0 (the
> "License"); you may not use this file except in compliance
> with the License.  You may obtain a copy of the License at
>   http://www.apache.org/licenses/LICENSE-2.0
> Unless required by applicable law or agreed to in writing,
> software distributed under the License is distributed on an
> "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> KIND, either express or implied.  See the License for the
> specific language governing permissions and limitations
> under the License.
> -->
> <configuration xmlns="urn:activemq"
>                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>                xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd">
>    <core xmlns="urn:activemq:core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>          xsi:schemaLocation="urn:activemq:core ">
>       <name>iotBrokerA</name>
>       <persistence-enabled>true</persistence-enabled>
>       <!-- this could be ASYNCIO or NIO
>        -->
>       <journal-type>ASYNCIO</journal-type>
>       <paging-directory>/artemis/data/paging</paging-directory>
>       <bindings-directory>/artemis/data/bindings</bindings-directory>
>       <journal-directory>/artemis/data/journal</journal-directory>
>       <large-messages-directory>/artemis/data/large-messages</large-messages-directory>
>       <journal-datasync>true</journal-datasync>
>       <journal-min-files>2</journal-min-files>
>       <journal-pool-files>-1</journal-pool-files>
>       <!--
>         You can specify the NIC you want to use to verify if the network
>          <network-check-NIC>theNickName</network-check-NIC>
>         -->
>       <!--
>         Use this to use an HTTP server to validate the network
>          <network-check-URL-list>http://www.apache.org</network-check-URL-list> -->
>       <!-- <network-check-period>10000</network-check-period> -->
>       <!-- <network-check-timeout>1000</network-check-timeout> -->
>       <!-- this is a comma separated list, no spaces, just DNS or IPs
>            it should accept IPV6
>            Warning: Make sure you understand your network topology as this is meant to validate if your network is valid.
>                     Using IPs that could eventually disappear or be partially visible may defeat the purpose.
>                     You can use a list of multiple IPs, and if any successful ping will make the server OK to continue running -->
>       <!-- <network-check-list>10.0.0.1</network-check-list> -->
>       <!-- use this to customize the ping used for ipv4 addresses -->
>       <!-- <network-check-ping-command>ping -c 1 -t %d %s</network-check-ping-command> -->
>       <!-- use this to customize the ping used for ipv6 addresses -->
>       <!-- <network-check-ping6-command>ping6 -c 1 %2$s</network-check-ping6-command> -->
>       <!--
>        This value was determined through a calculation.
>        Your system could perform 6.25 writes per millisecond
>        on the current journal configuration.
>        That translates as a sync write every 160000 nanoseconds
>       -->
>       <journal-buffer-timeout>160000</journal-buffer-timeout>
>     <connectors>
>         <!-- Connector used to be announced through cluster connections and notifications -->
>         <connector name="artemis">tcp://myserver:61616</connector>
>     </connectors>
>       <!-- how often we are looking for how many bytes are being used on the disk in ms -->
>       <disk-scan-period>5000</disk-scan-period>
>       <!-- once the disk hits this limit the system will block, or close the connection in certain protocols
>            that won't support flow control. -->
>       <max-disk-usage>90</max-disk-usage>
>       <!-- the system will enter into page mode once you hit this limit.
>            This is an estimate in bytes of how much the messages are using in memory
>             The system will use half of the available memory (-Xmx) by default for the global-max-size.
>             You may specify a different value here if you need to customize it to your needs.
>             <global-max-size>100Mb</global-max-size>
>       -->
>       <acceptors>
>          <!-- useEpoll means: it will use Netty epoll if you are on a system (Linux) that supports it -->
>          <!-- amqpCredits: The number of credits sent to AMQP producers -->
>          <!-- amqpLowCredits: The server will send the # credits specified at amqpCredits at this low mark -->
>          <!-- Acceptor for every supported protocol -->
>          <acceptor name="artemis">tcp://myserver:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300</acceptor>
>          <acceptor name="mqtt">tcp://myserver:1883?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=MQTT;useEpoll=true</acceptor>
>          <acceptor name="mqtt_ssl">tcp://myserver:8883?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=MQTT;useEpoll=true;sslEnabled=true;keyStorePath=/artemis/security/PROD_NC1.jks;keyStorePassword=********</acceptor>
>       </acceptors>
>       <cluster-user>AdminCluster</cluster-user>
>       <!--<cluster-password>${cluster-password}</cluster-password>-->
>       <cluster-password>**********</cluster-password>
>       <broadcast-groups>
>          <broadcast-group name="bg-group1">
>             <group-address>231.7.7.7</group-address>
>             <group-port>9876</group-port>
>             <broadcast-period>5000</broadcast-period>
>             <connector-ref>artemis</connector-ref>
>          </broadcast-group>
>       </broadcast-groups>
>       <discovery-groups>
>          <discovery-group name="dg-group1">
>             <group-address>231.7.7.7</group-address>
>             <group-port>9876</group-port>
>             <refresh-timeout>10000</refresh-timeout>
>          </discovery-group>
>       </discovery-groups>
>       <cluster-connections>
>          <cluster-connection name="my-cluster">
>             <connector-ref>artemis</connector-ref>
>             <message-load-balancing>ON_DEMAND</message-load-balancing>
>             <max-hops>0</max-hops>
>             <discovery-group-ref discovery-group-name="dg-group1"/>
>          </cluster-connection>
>       </cluster-connections>
>       <ha-policy>
>          <shared-store>
>             <master>
>                <failover-on-shutdown>true</failover-on-shutdown>
>             </master>
>          </shared-store>
>       </ha-policy>
>       <security-settings>
>          <security-setting match="#">
>             <permission type="createNonDurableQueue" roles="Myrole"/>
>             <permission type="deleteNonDurableQueue" roles="Myrole"/>
>             <permission type="createDurableQueue" roles="Myrole"/>
>             <permission type="deleteDurableQueue" roles="Myrole"/>
>             <permission type="createAddress" roles="Myrole"/>
>             <permission type="deleteAddress" roles="Myrole"/>
>             <permission type="consume" roles="Myrole"/>
>             <permission type="browse" roles="Myrole,Myrole2"/>
>             <permission type="send" roles="Myrole,Myrole2"/>
>             <!-- we need this otherwise ./artemis data imp wouldn't work -->
>             <permission type="manage" roles="Myrole"/>
>          </security-setting>
>          
>          <security-setting match="projet.0397.test.test1.#">
>             <permission type="createDurableQueue" roles="Myrole2"/>
>             <permission type="deleteDurableQueue" roles="Myrole2"/>
>             <permission type="createAddress" roles="Myrole2"/>
>             <permission type="deleteAddress" roles="Myrole2"/>
>             <permission type="consume" roles="Myrole2"/>
>             <permission type="browse" roles="Myrole2"/>
>             <permission type="send" roles="Myrole2"/>
>          </security-setting>
>          <security-setting match="projet.0397.test.test2.#">
>             <permission type="createDurableQueue" roles="Myrole2"/>
>             <permission type="deleteDurableQueue" roles="Myrole2"/>
>             <permission type="createAddress" roles="Myrole2"/>
>             <permission type="deleteAddress" roles="Myrole2"/>
>             <permission type="consume" roles="Myrole2"/>
>             <permission type="browse" roles="Myrole2"/>
>             <permission type="send" roles="Myrole2"/>
>          </security-setting>
>          <security-setting match="projet.0397.test.test3.#">
>             <permission type="createDurableQueue" roles="Myrole2"/>
>             <permission type="deleteDurableQueue" roles="Myrole2"/>
>             <permission type="createAddress" roles="Myrole2"/>
>             <permission type="deleteAddress" roles="Myrole2"/>
>             <permission type="consume" roles="Myrole2"/>
>             <permission type="browse" roles="Myrole2"/>
>             <permission type="send" roles="Myrole2"/>
>          </security-setting>
>       </security-settings>
>       <address-settings>
>          <!-- if you define auto-create on certain queues, management has to be auto-create -->
>          <address-setting match="activemq.management#">
>             <dead-letter-address>DLQ</dead-letter-address>
>             <expiry-address>ExpiryQueue</expiry-address>
>             <redelivery-delay>0</redelivery-delay>
>             <!-- with -1 only the global-max-size is in use for limiting -->
>             <max-size-bytes>-1</max-size-bytes>
>             <message-counter-history-day-limit>10</message-counter-history-day-limit>
>             <address-full-policy>PAGE</address-full-policy>
>             <auto-create-queues>true</auto-create-queues>
>             <auto-create-addresses>true</auto-create-addresses>
>             <auto-create-jms-queues>true</auto-create-jms-queues>
>             <auto-create-jms-topics>true</auto-create-jms-topics>
>          </address-setting>
>          <!--default for catch all-->
>          <address-setting match="#">
>             <dead-letter-address>DLQ</dead-letter-address>
>             <expiry-address>ExpiryQueue</expiry-address>
>             <!--Expiration des messages au bout de 6 heures-->
>             <!--expiry-delay>21600000</expiry-delay-->
>             <expiry-delay>60000</expiry-delay>
>             <redelivery-delay>0</redelivery-delay>
>             <!-- with -1 only the global-max-size is in use for limiting -->
>             <max-size-bytes>-1</max-size-bytes>
>             <message-counter-history-day-limit>10</message-counter-history-day-limit>
>             <address-full-policy>PAGE</address-full-policy>
>             <auto-create-queues>true</auto-create-queues>
>             <auto-create-addresses>true</auto-create-addresses>
>             <auto-create-jms-queues>true</auto-create-jms-queues>
>             <auto-create-jms-topics>true</auto-create-jms-topics>
>          </address-setting>
>       </address-settings>
>       <addresses>
>          <address name="DLQ">
>             <anycast>
>                <queue name="DLQ" />
>             </anycast>
>          </address>
>          <address name="ExpiryQueue">
>             <anycast>
>                <queue name="ExpiryQueue" />
>             </anycast>
>          </address>
>          <address name="projet.0397.test.test1.#">
>             <multicast />
>          </address>
>          <address name="projet.0397.test.test2.#">
>             <multicast />
>          </address>
>          <address name="projet.0397.test.test3.#">
>             <multicast />
>          </address>
>       </addresses>
>    </core>
> </configuration>
> {noformat}
> {panel}
> Please find below a screen shot of the memory leak :
> !MemoryLeakArtemis.png|thumbnail!
> Can you help me to resolve this issue



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)