I'm new in scala programming and getting GC overhead limit exceeded
error when I execute sbt test
command in one of big scala project. Anyone knows how can I solve this?
I got help from my friends :)
Increase the memory option by executing with -mem option for example:
sbt -mem 2048 test
Other options:
For Mac & Linux user:
if we need to execute this a lot. We can update the .bash_profile
file and add below command:
export SBT_OPTS="-Xmx2G"
Other solution (works with Windows as well):
There's also a specific sbtopts
file where you can persist this memory setting:
Find a file in Mac/Linux:
/usr/local/etc/sbtopts
Or in Windows
C:\Program Files (x86)\sbt\conf
and add below configuration:
# set memory options
#
-mem 2048
Hopefully any of these tips will help someone with this problem.
EDIT:
If anyone using IntelliJ IDEA like me, you can increase the sbt memory usage using the VM Parameters as in the picture below.
-Xmx4G
Having a look at the launcher script for running sbt, which on my system resides at /usr/share/sbt/bin/sbt
, we see the following:
declare -r sbt_opts_file=".sbtopts"
declare -r etc_sbt_opts_file="/etc/sbt/sbtopts"
declare -r dist_sbt_opts_file="${sbt_home}/conf/sbtopts"
...
# Here we pull in the default settings configuration.
[[ -f "$dist_sbt_opts_file" ]] && set -- $(loadConfigFile "$dist_sbt_opts_file") "$@"
# Here we pull in the global settings configuration.
[[ -f "$etc_sbt_opts_file" ]] && set -- $(loadConfigFile "$etc_sbt_opts_file") "$@"
# Pull in the project-level config file, if it exists.
[[ -f "$sbt_opts_file" ]] && set -- $(loadConfigFile "$sbt_opts_file") "$@"
# Pull in the project-level java config, if it exists.
[[ -f ".jvmopts" ]] && export JAVA_OPTS="$JAVA_OPTS $(loadConfigFile .jvmopts)"
run "$@"
Thus we can put configuration settings in:
.jvmopts
.sbtopts
/etc/sbt/sbtopts
${sbt_home}/conf/sbtopts
For example, typelevel/cats
project uses .jvmopts
to set -Xmx3G
. Alternatively we could do
echo "-mem 2048" >> .sbtopts
Regarding environmental variablessbt -h
documents that
JAVA_OPTS environment variable, if unset uses "$java_opts"
.jvmopts if this file exists in the current directory, its contents
are appended to JAVA_OPTS
SBT_OPTS environment variable, if unset uses "$default_sbt_opts"
.sbtopts if this file exists in the current directory, its contents
are prepended to the runner args
For example,
export JAVA_OPTS=-Xmx2G
sbt
should run sbt with 2G of memory.
Note that if you are running tests in forked JVM, then you can increase memory via javaOptions
setting in build.sbt
like so:
Test / fork := true
Test / javaOptions ++= Seq("-Xmx4G")
VisualVM is a useful tool to see what settings were passed to a JVM process when experimenting with different ways of configuring SBT.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With