2014. november 14., péntek

ActiveMQ on Ubuntu 14.04 x64 VPS - Solve OutOfMemoryError, Could not reserve enough space for object heap

You need some tweaks to run ActiveMQ in a resource-constrained VPS environment, I've tried this on a VPS that had 2GB RAM.

0. Download ActiveMQ, extract to /opt/activemq and run:

./activemq setup



1. Tweak JAVA minimum heap memory and max heap size - run and also put this line to ~/.bashrc :

export JAVA_OPTS="-Xms128m -Xmx512m"


Verify settings:

echo $JAVA_OPTS
-Xms128m -Xmx512m

echo $_JAVA_OPTIONS

(empty)



2. Limit resource usage (memoryUsage -> 32MB):
nano conf/activemq.xml

          <systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage limit="32 mb"/>
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="10 gb"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="10 gb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>



3. Comment out a few transport Connectors


        <transportConnectors>
            <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

      <!--      <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
      
-->
  </transportConnectors>




4. Set ACTIVEMQ_OPTS_MEMORY and ACTIVEMQ_OPTS

nano /etc/default/activemq

# Set jvm memory configuration
if [ -z "$ACTIVEMQ_OPTS_MEMORY" ] ; then
ACTIVEMQ_OPTS_MEMORY="-Xms128M -Xmx512M"
fi

# Uncomment to enable audit logging
#ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS -Dorg.apache.activemq.audit=true"
ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS -Dorg.apache.activemq.UseDedicatedTaskRunner=false"



5. Setting up proper passwords:

/opt/activemq/conf# nano jetty-realm.properties

# username: password [,rolename ...]



Error messages on a VPS with 2GB RAM before tweaks:

INFO: Loading '/etc/default/activemq'
INFO: Using java '/usr/bin/java'
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.


opt/activemq/bin/activemq console
INFO: Loading '/etc/default/activemq'
INFO: Using java '/usr/bin/java'
INFO: Starting in foreground, this is just for debugging purposes (stop process by pressing CTRL+C)
Error occurred during initialization of VM
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:714)
at java.lang.ref.Finalizer.<clinit>(Finalizer.java:226)

./activemq: 453: ./activemq: Cannot fork

ERROR: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.activemq.xbean.XBeanBrokerService#0' defined in class path resource [activemq.xml]: Invocation of init method failed; nested exception is java.lang.OutOfMemoryError: unable to create new native thread
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.activemq.xbean.XBeanBrokerService#0' defined in class path resource [activemq.xml]: Invocation of init method failed; nested exception is java.lang.OutOfMemoryError: unable to create new native thread


Environment details:

ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127259
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 127259
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

See also:

http://activemq.apache.org/javalangoutofmemory.html

Nincsenek megjegyzések:

Megjegyzés küldése