This page last changed on Dec 03, 2008 by mtaylor.

JDK 1.4 does not provide information why the OutOfMemory error occurred.
JDK 1.5 or 1.6 are recommended as they provide a description of the error.
Since the default memory setting usually is around 64 or 128MB (256MB in Confluence 2.2 and later), you might have to adjust the settings to run a bigger Confluence instance with sufficient memory.

On this page:

Error formatting macro: toc: java.lang.NullPointerException

Diagnosis and Common Causes

There are several reasons that out of memory exceptions can be thrown. Either the virtual machine Confluence is using has hit its allocated memory limit, the system on which Confluence is running has run out of physical and virtual memory, or Confluence is consuming too much memory. In the first case, you should modify the maximum heap size of the virtual machine, per the instructions in this document; in the second or third cases, the solution is to identify the culprit of the memory leak.

For help determining which memory settings to choose, consult Managing Application Server Memory Settings.

If you have not yet set your memory settings and your usage has increased, it's likely that you must set your memory, described below. If your usage patterns have not changed but you've added a plugin or done an upgrade, it's likely that there is a memory leak in a plugin.

  1. If you're using the in-memory database (HSQLDB), migrate to an external database. The in-memory database can use a lot of memory.
  2. If you are using XML backups, disable them and move to the Alternative Backup Strategy. The XML backup process can be a memory hog.

To troubleshoot potential memory leaks, enter Plugin Support Mode. Take thread dumps during normal operations and during an outage, and submit this information in a support ticket.

Determining Heap Errors Versus Permanent Generation Size (PermGen) Errors

Heap space memory errors will contain only a java.lang.OutOfMemoryError. If you get the error message: java.lang.OutOfMemoryError: PermGen space this means that you have exceeded Java's fixed 64Mb block for loading class files. You will need to add the argument -XX:MaxPermSize=256m to JAVA_OPTS, in addition to any argument you use to set the heap size.

PermGen Space Parameters

JAVA_OPTS="-Xms128m -Xmx1024m -XX:MaxPermSize=256m $JAVA_OPTS -Djava.awt.headless=true "

Heap Space Parameters

JAVA_OPTS="-Xms128m -Xmx1024m -XX:MaxPermSize=256m $JAVA_OPTS -Djava.awt.headless=true "

Setting the Memory Settings

How to set the heap or permanent generation memory depends on your distribution, platform, and how you start Confluence. First, figure out whether you have the war/ear version or the stand-alone. Then find your operating system, and finally look for how you start Confluence.

Confluence War Distribution

If you are running the War distribution, consult your application server's documentation for how to set environment variables.

If you are running Confluence WAR with Tomcat you would need to update <Tomcat install directory>/bin/ catalina.bat for Windows or catalina.sh for other OS.

Confluence Stand-alone (zip or tar.gz distribution)

If you are running Tomcat standalone, you can change the following settings.

Do not set your memory using CATALINA_OPTS, because this is overridden by JAVA_OPTS.

Linux

  • In the unpacked Confluence standalone directory, edit the file bin/setenv.sh
  • Edit the line beginning with JAVA_OPTS= substituting new values for -Xms (starting memory) and -Xmx (maximum memory)
  • Leave the rest of the options in that line unchanged

An example of a minimal setting for a large system - max heap size is set to 1Gb :

JAVA_OPTS="-Xms128m -Xmx1024m -XX:MaxPermSize=256m $JAVA_OPTS -Djava.awt.headless=true "

Windows

Starting from the Bat File

  • In the unpacked Confluence standalone directory, edit the file bin/setenv.bat
  • Edit the line beginning with set JAVA_OPTS= substituting new values for -Xms (starting memory) and -Xmx (maximum memory)
  • Leave the rest of the options in that line unchanged

Windows - Running as a Windows Service

If you are running Confluence as a Windows service, you can increase the memory using two ways.

Edit the registry:

Follow this step by step guide to edit the Windows Registry

OR

Run this command from the command line:

tomcat6 //US//Confluence --JvmMs 1024 --JvmMx 1024 ++JvmOptions="-XX:MaxPermSize=256m"
The US parameter stands for Update Service. You can refer to Apache's Windows Service How To for more information.

OS X

Starting from Tomcat

If you are using the 'serveradmin start appserver' to start and stop tomcat, then update /usr/share/servermgrd/bundles/servermgr_appserver.bundle/Contents/Resources/run.sh.

Starting from the shell script or "Run Confluence In Terminal Window.command"

Follow the Linux instructions above.

Confluence Installer Memory Settings

If you are using the Evaluation Installer, use the instructions accordingly:

How Confluence is started
Instructions to use
OS X Starting from the "Run Confluence In Terminal Window.command" Linux instructions
Windows as a service
Windows registry instructions
Windows .bat file
Windows .bat file instructions - make sure to start Confluence from the .bat file in the Startup menu



Other OutOfMemoryErrors

Other factors such as system load and allocating too much memory to your JVM Heap can also cause OutOfMemory Errors. For more information, you can refer to the JIRA documentation on Causes of OutOfMemoryErrors.

OutOfMemoryError: unable to create new native thread

This error occurs when the operating system is unable to create new threads. This is due to the JVM Heap taking up the available RAM.

Big heaps take away from the space that can be allocated for the stack of a new thread

For Linux the maximum heap size of the JVM cannot be greater than 2GB. If you only have 2GB RAM in your server, it is not recommended to set the Max size of the JVM that high.
The size of the stack per thread can also contribute to this problem. The stack size can reduce the number of threads that can be created.

To fix this problem, you should reduce the size of your JVM Heap and also the size of the stack per thread.
The stack size can be changed with the following (example) parameter:

"-Xss512k"

Please refer to this guide as a reference for JVM tuning.

OutOfMemoryError: GC overhead limit exceeded

This error indicates that the JVM took too long to free up memory during its GC process. This error can be thrown from the Parallel or Concurrent collectors.

The parallel collector will throw an OutOfMemoryError if too much time is being spent in garbage collection: if more than 98% of the total time is spent in garbage collection and less than 2% of the heap is recovered, an OutOfMemoryError will be thrown. This feature is designed to prevent applications from running for an extended period of time while making little or no progress because the heap is too small. If necessary, this feature can be disabled by adding the option -XX:-UseGCOverheadLimit to the command line.

This kind of OutOfMemoryError can be caused if your java process is starting to use swapped memory for its heap. This will cause the JVM to take a lot longer than normal to perform normal GC operations. This can eventually cause a timeout to occur and cause this error.

To overcome this issue, you need to make sure that all processes can't allocate more memory than there is system memory. In practice this is impossible to do for all processes. At a minimum you should make sure that all your jvm's do not have a total maximum memory allocation than your normally available system memory.

Please refer to this guide for more information.

OutOfMemoryError: Requested array size exceeds VM limit

This error indicates that Confluence attempted to allocate an array that is larger than the Java heap size. More details regarding this error can be found here.
This is due to a known limitation of the JVM as documented here. We have a bug lodged against this, to better handle this exception in Confluence.

RELATED TOPICS

Managing Application Server Memory Settings
Application Server Configuration
FAQ Home
Tomcat JVM options and Modify the Default JVM Settings
Logging A Thread Dump


1.JPG (image/jpeg)
2.JPG (image/jpeg)
3.JPG (image/jpeg)
Document generated by Confluence on Dec 03, 2008 15:14