How to prevent java.lang.OutOfMemoryError: PermGen space at Scala compilation?

ScalaApache SparkMemory ManagementSbtScalatra Sbt

Scala Problem Overview


I have noticed a strange behavior of my scala compiler. It occasionally throws an OutOfMemoryError when compiling a class. Here's the error message:

[info] Compiling 1 Scala source to /Users/gruetter/Workspaces/scala/helloscala/target/scala-2.9.0/test-classes...
java.lang.OutOfMemoryError: PermGen space
Error during sbt execution: java.lang.OutOfMemoryError: PermGen space

It only happens once in a while and the error is usually not thrown on the subsequent compile run. I use Scala 2.9.0 and compile via SBT.

Does anybody have a clue as to what might be the cause for this error? Thanks in advance for your insights.

Scala Solutions


Solution 1 - Scala

I use HomeBrew to install sbt on OS X. It supports a SBT_OPTS argument which can be put in ~/.sbtconfig file with export SBT_OPTS=-XX:MaxPermSize=256M.

Solution 2 - Scala

The cause for OutOfMemoryError: PermGen space is that it doesn't have enough permanent generation space :) If you are using Oracle JVM, you need to add the -XX:MaxPermSize=256M (or some other amount of space) argument to your sbt script. For other JVMs, look at their documentation.

Solution 3 - Scala

I assumed you're using sbt 0.13.6 or higher. Create .sbtopts file in your sbt project's root with the following content:

-J-Xmx4G
-J-XX:MaxMetaspaceSize=1G
-J-XX:MaxPermSize=1G
-J-XX:+CMSClassUnloadingEnabled

MaxMetaspaceSize is for Java 8 whereas MaxPermSize is for Java 7. They are critical to prevent out of memory errors related either to permgen or metaspace exhaustion. Of course, consider adapting flag values or adding any other flags required.

More details and alternative approaches can be found in this blog post.

Solution 4 - Scala

I had this issue, played around with it for 10 minutes looking at sites trying to change the memory size.

Turns out i resolved it by,

user-profile$ sbt

Then,

sbt-project-name 0.1> clean

This cleared it up for me.

Solution 5 - Scala

It looks like a memory leak in SBT for me as in my case the program compiles and runs successfully for about 3-5 times before hitting the exception which is fixed by SBT restart.

The most adequate solution indeed seems to be -XX:MaxPermSize= JVM parameter as Alexey Romanov suggests or to restart SBT periodically if it helps.

But there is another interesting way: try switching to http://jdk8.java.net/download.html">Java 8. AFAIK it doesn't use PermGen any more and is probably immune to this exception this way.

I still hope SBT authors will address this issue in future versions.

Solution 6 - Scala

I am building with the Jenkins sbt plugin and had the same problems. They were resolved after copying the SBT_OPTS from the sbt file to the Jenkins job config's JVM flags.

Solution 7 - Scala

Originally using a command like:

java -jar /path/to/sbt-launch.jar test

I got first OutOfMemoryError: PermGen space which I solved using -XX:MaxPermSize, and then OutOfMemoryError: Java heap space, to which -Xmx was the remedy.

So in my case, a command like this worked:

java -XX:MaxPermSize=256M -Xmx2048M -jar /path/to/sbt-launch.jar test

Solution 8 - Scala

change following code block in sbt.sh file and save its working fine.

get_mem_opts () {
  local mem=${1:-1536}
  local perm=$(( $mem / 4 ))
  (( $perm > 256 )) || perm=1024 //256 to 1024
  (( $perm < 1024 )) || perm=2048 // 1024 to 2048
  local codecache=$(( $perm / 2 ))

  echo "-Xms${mem}m -Xmx${mem}m -XX:MaxPermSize=${perm}m -XX:ReservedCodeCacheSize=${codecache}m"
}

or

using terminal to export sbt config

export SBT_OPTS="-XX:+CMSClassUnloadingEnabled -XX:PermSize=1024M -XX:MaxPermSize=2048M"

Solution 9 - Scala

You can also add a .jvmopts file in the root folder of your project, and write inside the file the following:

-Xms1g
-Xmx4g

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBumbleGeeView Question on Stackoverflow
Solution 1 - ScalamichaelliuView Answer on Stackoverflow
Solution 2 - ScalaAlexey RomanovView Answer on Stackoverflow
Solution 3 - ScalaTvarohView Answer on Stackoverflow
Solution 4 - ScalaAlex StewartView Answer on Stackoverflow
Solution 5 - ScalaIvanView Answer on Stackoverflow
Solution 6 - ScalanieboView Answer on Stackoverflow
Solution 7 - ScalaJonikView Answer on Stackoverflow
Solution 8 - ScalaKARTHIKEYAN.AView Answer on Stackoverflow
Solution 9 - ScalaVitaly OlegovitchView Answer on Stackoverflow