Search code examples
javaamazon-web-servicesspring-bootjvmheap-size

Not able to set JVM heap size on AWS Elastic Beanstalk Java SE Platform


I have a Spring Boot app deployend on Elastic Beanstalk using a single EC2 t2.micro instance (1GB RAM).

I need to increase my app's JVM Heap size but I'm not being able to do so. The things I have tried are:

  • Setting a JAVA_OPTS variable in the enviroment configuration in the EB console with the value -Xms512m -Xmx896m.
  • Deploying the app with a Procfile in the project root folder what contains the following line: web: java -jar <relative-path-to-jar> -Xms512m -Xmx896m

What else could I try?

Note: To check the JVM heap size of the running app I ssh into the instance and use the jstat command as this answer describes. Calculating the max value always gives me 256MB which is the dafault.


Solution

  • I solved it!

    My Spring Boot project was a multi-module one:

    • base_module (POM type)
      • .elasticbeanstalk
        • config.yaml
      • module1 (delpyed module. imports module2 and module3 in the pom.xml)
      • module2
      • module3
      • Procfile

    One of the modules (the one's jar I was deploying) imported the other ones. My mistake was that I was putting the Procfile in the root of the base module. Also in the config.yaml file I was putting the following lines:

    deploy:
        artifact: module1/target/app.jar
    

    So the command eb deploy wasn't taking in account the Procfile.

    The solution was to move the .elasticbeanstalk folder into the module1 folder, removing the lines I said above from the config.yaml and to add a Procfile in the root of module1 with the following line:

    web: java -jar target/app.jar -Xmx896M
    

    The final project structure was:

    • base_module (POM type)
      • module1 (delpyed module. imports module2 and module3 in the pom.xml)
        • .elasticbeanstalk
          • config.yaml
        • src
        • target
      • Procfile
      • module2
      • module3

    Hope it helps somebody!