Skip to content

sbt bash script java memory arguments don't override .sbtopts like they did in 1.10.7 #8685

@er1c

Description

@er1c

steps

.sbtopts:

-J-Xmx2g
-J-XX:ReservedCodeCacheSize=1g
-J-XX:MaxMetaspaceSize=2g
-J-Xss512m
-J-XX:+UseG1GC

1.10.7

sbt -d -J-Xms2G --mem 12288 -Dsbt.boot.lock=false test
[addSbt] arg = '-debug'
[addJava] arg = '-Xms2G'
[addMemory] arg = '12288'
[addJava] arg = '-Xms12288m'
[addJava] arg = '-Xmx12288m'
[addJava] arg = '-Xss4M'
[addJava] arg = '-XX:ReservedCodeCacheSize=512m'
[addJava] arg = '-Dsbt.boot.lock=false'
[residual] arg = 'test'
[residual] arg = 'test'
[sbt_options] declare -a sbt_options='()'
[process_args] java_version = '11'
[addJava] arg = '-Dsbt.script=/Users/epeters/.sdkman/candidates/sbt/1.10.7/bin/sbt'
[copyRt] java9_rt = '/Users/epeters/.sbt/1.0/java9-rt-ext-amazon_com_inc__11_0_21/rt.jar'
[addJava] arg = '-Dscala.ext.dirs=/Users/epeters/.sbt/1.0/java9-rt-ext-amazon_com_inc__11_0_21'
# Executing command line:
java
-Dfile.encoding=UTF-8
-XX:+UseG1GC
-Xms12288m
-Xmx12288m
-Xss4M
-XX:ReservedCodeCacheSize=512m
-Dsbt.boot.lock=false
-Dsbt.script=/Users/epeters/.sdkman/candidates/sbt/1.10.7/bin/sbt
-Dscala.ext.dirs=/Users/epeters/.sbt/1.0/java9-rt-ext-amazon_com_inc__11_0_21
-jar
/Users/epeters/.sdkman/candidates/sbt/1.10.7/bin/sbt-launch.jar
-debug
test

1.12.1

$ sbt -d -mem 12288 -Dsbt.boot.lock=false test
[addSbt] arg = '-debug'
[addMemory] arg = '12288'
[addJava] arg = '-Xms12288m'
[addJava] arg = '-Xmx12288m'
[addJava] arg = '-Xss4M'
[addJava] arg = '-XX:ReservedCodeCacheSize=512m'
[addJava] arg = '-Dsbt.boot.lock=false'
[residual] arg = 'test'
[addJava] arg = '-Xmx2g'
[addJava] arg = '-XX:ReservedCodeCacheSize=1g'
[addJava] arg = '-XX:MaxMetaspaceSize=2g'
[addJava] arg = '-Xss512m'
[addJava] arg = '-XX:+UseG1GC'
[residual] arg = 'test'
[sbt_options] declare -a sbt_options='()'
[process_args] java_version = '11'
[addJava] arg = '-Dsbt.script=/Users/epeters/.sdkman/candidates/sbt/current/bin/sbt'
[copyRt] java9_rt = '/rt.jar'
mkdir: : No such file or directory
Error occurred during initialization of VM
Initial heap size set to a larger value than the maximum heap size
[addJava] arg = '-Dscala.ext.dirs='
# Executing command line:
java
-Dfile.encoding=UTF-8
-Xms12288m
-Xmx12288m
-Xss4M
-XX:ReservedCodeCacheSize=512m
-Dsbt.boot.lock=false
-Xmx2g
-XX:ReservedCodeCacheSize=1g
-XX:MaxMetaspaceSize=2g
-Xss512m
-XX:+UseG1GC
-Dsbt.script=/Users/epeters/.sdkman/candidates/sbt/current/bin/sbt
-Dscala.ext.dirs=
-jar
/Users/epeters/.sdkman/candidates/sbt/1.12.1/bin/sbt-launch.jar
-debug
test

Error occurred during initialization of VM
Initial heap size set to a larger value than the maximum heap size

Notice how the -Xmx2g is now propagated from the .sbtopts despite having the command line override.

problem

[copyRt] java9_rt = '/rt.jar'
mkdir: : No such file or directory
Error occurred during initialization of VM
Initial heap size set to a larger value than the maximum heap size

The java9_rt copy appears to be mildly broken, .sbtopts appears to always be included now.

expectation

We should be able to merge command line arguments at a higher priority than the other environment or file defaults.

I also would expect a valid [addJava] arg = '-Dscala.ext.dirs=/Users/epeters/.sbt/1.0/java9-rt-ext-amazon_com_inc__11_0_21' for the old work around.

notes

I created a diff between 1.10.7 and 1.12.1 here: https://gist.github.com/er1c/9f51326f7745ff802011d91ff268e618/revisions

I'll also take a stab at trying to figure out what the bug is.

In the new launcher script I do see the .sbtopts bringing in the [addJava] arg = '-XX:+UseG1GC' which was getting ignored in the older version. Edit: I'm blind. Tough to say what the expectation should be.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions