Uploaded image for project: 'JBoss A-MQ'
  1. JBoss A-MQ
  2. ENTMQ-2186

QIT amqp.large_content_test causes broker to exhaust Java heap space

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not a Bug
    • Icon: Major Major
    • None
    • None
    • amqp
    • None
    • Hide

      QIT may be obtained from github. Instructions for building and installing are located in QUICKSTART.md. There have been several updates that affect these instructions, and I have attempted to keep up with them, but there may be a few holes. Give me a shout if you need help.

      The steps are as follows:
      1. Obtain QIT and its prerequisites, perform a build and local install.
      2. Start the AMQ broker using the attached config file.
      3. Start the QIT test: python -m qpid_interop_test.amqp_large_content_test
      4. The test will take a little time, so get some tea...

      Show
      QIT may be obtained from github . Instructions for building and installing are located in QUICKSTART.md. There have been several updates that affect these instructions, and I have attempted to keep up with them, but there may be a few holes. Give me a shout if you need help. The steps are as follows: 1. Obtain QIT and its prerequisites, perform a build and local install. 2. Start the AMQ broker using the attached config file. 3. Start the QIT test: python -m qpid_interop_test.amqp_large_content_test 4. The test will take a little time, so get some tea...

      When running the Qpid Interop Test's amqp_large_content_test against the amq6 broker (5.16.0-SNAPSHOT built from master), the broker eventually enters a state where every test fails. Once this state is reached, the broker must be restarted in order to regain normal operation.

      The test sends 1MB and 10MB messages of the various AMQP varilable-length types (currently binary, list, map, string and symbol). In the case of list and map, there are 4 variations for each message size in which the total message size is subdivided into several parts. For list 1MB test, the list or map will be subdivided as follows:

      • 1 x 1MB string
      • 16 x 64kB strings
      • 256 x 4kB strings
      • 4096 x 256B strings

      but the total payload will be approx. the same for each case.

      A typical test runs as follows:

      python -m qpid_interop_test.amqp_large_content_test
      WARNING: Rhea Javascript shims not found
      Test Broker: ActiveMQ v.5.16.0-SNAPSHOT on Java/1.8.0_161
      
      test_binary_AmqpNetLite->AmqpNetLite (__main__.BinaryTestCase) ... ok
      test_binary_AmqpNetLite->ProtonCpp (__main__.BinaryTestCase) ... ok
      ... (approx. 40 tests pass)
      test_map_ProtonPython2->ProtonCpp (__main__.MapTestCase) ... ok
      test_map_ProtonPython2->ProtonPython2 (__main__.MapTestCase) ... ok
      test_map_ProtonPython2->ProtonPython3 (__main__.MapTestCase) ... ERROR
      test_map_ProtonPython3->AmqpNetLite (__main__.MapTestCase) ... ERROR
      ... (all the rest fail)
      

      Although the test almost always fails during the map portion of the test, if this section of the test is run on its own, it always passes. So it seems to me that the broker is suffering some sort of cumulative effect with large messages. In addition, the log file shows the following error:

      2018-03-09 10:34:07,993 | WARN  | Transport Connection to: tcp://0:0:0:0:0:0:0:1:54634 failed: org.apache.activemq.transport.amqp.AmqpProtocolException: Could not process AMQP commands | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp:///0:0:0:0:0:0:0:1:54634@5672
      2018-03-09 10:37:08,079 | WARN  | Transport Connection to: tcp://0:0:0:0:0:0:0:1:54632 failed: java.io.EOFException | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp:///0:0:0:0:0:0:0:1:54632@5672
      2018-03-09 10:37:21,004 | WARN  | Transport Connection to: tcp://0:0:0:0:0:0:0:1:54642 failed: org.apache.activemq.transport.amqp.AmqpProtocolException: Could not process AMQP commands | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp:///0:0:0:0:0:0:0:1:54642@5672
      2018-03-09 10:37:21,569 | ERROR | Error in thread 'ActiveMQ BrokerService[localhost] Task-13' | org.apache.activemq.thread.TaskRunnerFactory | ActiveMQ BrokerService[localhost] Task-13
      java.lang.OutOfMemoryError: Java heap space
      2018-03-09 10:37:21,569 | ERROR | Error in thread 'ActiveMQ BrokerService[localhost] Task-11' | org.apache.activemq.thread.TaskRunnerFactory | ActiveMQ BrokerService[localhost] Task-11
      java.lang.OutOfMemoryError: Java heap space
      	at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:57)[:1.8.0_161]
      ... (see attached log file for full trace)
      

      Looking at the AMQP traffic between the broker and clients, once this condition occurs, all attempts to use the AMQP transport result in the following error:

      Condition: amqp:decode-error
      Description: Could not process AMQP commands
      

        1. activemq.log
          11 kB
        2. activemq.xml
          6 kB

            Unassigned Unassigned
            kvanderr@redhat.com Kim van der Riet
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: