Uploaded image for project: 'ActiveMQ Artemis'
  1. ActiveMQ Artemis
  2. ARTEMIS-5100

Add support for modifying journal-max-io to create CLI command

    XMLWordPrintableJSON

Details

    Description

      When the broker starts in the cloud it runs the docker-run.sh script. This script performs auto-tuning for the journal (to achieve the best performance). However, the auto-tuning does not read broker.xml as I expected. Instead, it uses the default value for maxio from ActiveMQDefaultConfiguration.getDefaultJournalMaxIoAio() which cannot be changed through configuration parameters or any other way (the value is 4096).
       
      Thus, when newContext is called and it invokes the native io_queue_init, we encounter an error, and the execution stops.

      Auto tuning journal ...java.lang.RuntimeException: Cannot initialize queue:Resource temporarily unavailable        
      at org.apache.activemq.artemis.nativo.jlibaio.LibaioContext.newContext(Native Method)        
      at org.apache.activemq.artemis.nativo.jlibaio.LibaioContext.<init>(LibaioContext.java:180)        
      at org.apache.activemq.artemis.core.io.aio.AIOSequentialFileFactory.start(AIOSequentialFileFactory.java:290)        
      at org.apache.activemq.artemis.cli.commands.util.SyncCalculation.newFactory(SyncCalculation.java:246)        
      at org.apache.activemq.artemis.cli.commands.util.SyncCalculation.syncTest(SyncCalculation.java:80)        
      at org.apache.activemq.artemis.cli.commands.Create.performAutoTune(Create.java:1045)        
      at org.apache.activemq.artemis.cli.commands.Create.run(Create.java:824)        
      at org.apache.activemq.artemis.cli.commands.Create.execute(Create.java:520)        
      at org.apache.activemq.artemis.cli.Artemis.internalExecute(Artemis.java:221)        
      at org.apache.activemq.artemis.cli.Artemis.execute(Artemis.java:167)        
      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)        
      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)        
      at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        
      at java.base/java.lang.reflect.Method.invoke(Method.java:568)        
      at org.apache.activemq.artemis.boot.Artemis.execute(Artemis.java:157)        
      at org.apache.activemq.artemis.boot.Artemis.main(Artemis.java:64)
      Couldn't perform sync calculation, using default values

      I think it happened because the max-io value in the guest OS might be lower than the default value in Artemis.

      Attachments

        Issue Links

          Activity

            People

              jbertram Justin Bertram
              akvel Valeriy Ak
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 2h 10m
                  2h 10m