Uploaded image for project: 'Bamboo Data Center'
  1. Bamboo Data Center
  2. BAM-20181

Windows Elastic Agents are OOMing under default configurations when deploying third-party plugins

    XMLWordPrintable

Details

    Description

      Summary

      Windows Elastic Agents are OOMing under default configurations when deploying third-party plugins and slows down agent start-up performance.

      Environment

      • Windows Elastic Agents

      Steps to Reproduce

      1. Install a third-party plugin, such as Artifactory
      2. Start a Windows Elastic Agent

      Expected Results

      Agent can successfully deploy the plugin on start-up

      Actual Results

      The below exception is thrown in the bamboo-elastic-agent.out file:

      2018-11-14 08:02:14,797 ERROR [AgentRunnerThread] [ScanningPluginLoader] Unable to deploy plugin 'org.jfrog.bamboo.bamboo-artifactory-plugin' from 'Unit: C:\Users\Bamboo\bamboo-agent-home\plugins\user-installed\bamboo-artifactory-plugin-2.5.1.jar (1542182479271)'.
      2018-11-14 08:02:14,797 ERROR [AgentRunnerThread] [ScanningPluginLoader] Because of the following exception:
      java.lang.OutOfMemoryError: Java heap space
      	at java.util.zip.InflaterInputStream.<init>(InflaterInputStream.java:88)
      	at java.util.zip.ZipFile$ZipFileInflaterInputStream.<init>(ZipFile.java:408)
      	at java.util.zip.ZipFile.getInputStream(ZipFile.java:389)
      	at aQute.bnd.osgi.ZipResource.openInputStream(ZipResource.java:26)
      	at aQute.bnd.osgi.Clazz.parseClassFileWithCollector(Clazz.java:484)
      	at aQute.bnd.osgi.ClassDataCollectors.parse(ClassDataCollectors.java:37)
      	at aQute.bnd.osgi.Analyzer.analyze(Analyzer.java:187)
      	at aQute.bnd.osgi.Builder.analyze(Builder.java:352)
      	at aQute.bnd.osgi.Analyzer.calcManifest(Analyzer.java:618)
      	at com.atlassian.plugin.osgi.factory.transform.stage.GenerateManifestStage.execute(GenerateManifestStage.java:187)
      	at com.atlassian.plugin.osgi.factory.transform.DefaultPluginTransformer.transform(DefaultPluginTransformer.java:140)
      	at com.atlassian.plugin.osgi.factory.OsgiPluginFactory.createOsgiPluginJar(OsgiPluginFactory.java:329)
      	at com.atlassian.plugin.osgi.factory.OsgiPluginFactory.create(OsgiPluginFactory.java:231)
      	at com.atlassian.plugin.loaders.ScanningPluginLoader.deployPluginFromUnit(ScanningPluginLoader.java:142)
      	at com.atlassian.plugin.loaders.ScanningPluginLoader.loadAllPlugins(ScanningPluginLoader.java:87)
      	at com.atlassian.plugin.loaders.PermissionCheckingPluginLoader.loadAllPlugins(PermissionCheckingPluginLoader.java:28)
      	at com.atlassian.plugin.manager.DefaultPluginManager.earlyStartup(DefaultPluginManager.java:524)
      	at com.atlassian.plugin.manager.DefaultPluginManager.init(DefaultPluginManager.java:503)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1827)
      	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1770)
      	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1698)
      	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:579)
      	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501)
      	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
      	at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$42/668961043.getObject(Unknown Source)
      	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
      	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
      	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
      

      Workaround

      Set the following into the Instance startup script for the image at Bamboo Administration >> Image Configurations >> Edit

      Option 1

      Requires sed to be installed in the image which is included in our stock images but may not existing in a custom AMI.

      sed -i "s/-Dimagefiles/-Dbamboo.agent.syncOnly -Dimagefiles/" C:\opt\bamboo-elastic-agent\bin\bamboo-elastic-agent.bat
      sed -i 's@cd %%OLD_PWD%%@sed -i \'s/-Xmx256m/-Xmx512m/\' \%%TEMP\%%\\\\bamboo-agent-bootstrap-1.bat\n\%%TEMP\%%\\\\bamboo-agent-bootstrap-1.bat ^>^>bamboo-elastic-agent.out 2^>\^&1\ncd %%OLD_PWD%%@' C:\opt\bamboo-elastic-agent\bin\bamboo-elastic-agent.bat
      
      Option 2:
      setx -m _JAVA_OPTIONS "-Xms256m -Xmx512m"

      This is a global Java variable, so any java processes that run during your builds (e.g. Gradle and Maven) will also inherit this config for their respective JVMs.

      Attachments

        Issue Links

          Activity

            People

              jmajkutewicz Jan Majkutewicz (Inactive)
              jowen@atlassian.com Jeremy Owen
              Votes:
              11 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: