Confluence eats lots of RAM

Hello,

I've updated confluence to latest version on my test environment and i was surprised, that even though JVM has alocated 2GB of memory, confluence processes consumes about 13GB!! of RAM. Maybe i didnt understand documentation correctly, but could anyone give me a tip or explanation what should i check or could you confirm that this behavior is standard?

Thanks

3 answers

0 vote
Steven Behnke Community Champion Oct 18, 2017

There's no way anyone can really answer this question. This doesn't 'sound' standard but it could be well within the settings you've given the JVM.

  • How are you determining memory usage?
  • What settings have you applied to your JVM?

Java puts a hard cap on the RAM used if you've set it correctly.   I suspect when you say "JVM has allocated 2GB", that's not really being applied, so Confluence is quite happily eaten piles of memory and never done any garbage collection to free any.

Have a look at your Confluence's system information page, that has RAM usage data, and can answer Steven's second question (look for Xmx )

Well for first run of new version i did not change anything except of xms and xmx and set it to 2048m... nothing else changed.. I want to try start without any more changes....

Memory usage read from general info from cnf:

Java VM Memory Stats
Heap memory
  Used memory (22%) Free memory (78%)
   78% Free
Maximum heap size 2048 MB
Total Allocated Memory 2048 MB
Memory used 460 MB
Free allocated memory of 1587 MB
Total free memory 1587 MB

and from linux virtual server top utility, where after start of confluence it consumes 13GB of RAM

Confluence Usage Stats
Total spaces 58
Portals 49
Personal spaces 9
Content (all versions) 73972
Content (current version) 66163
Local users 31166
Local groups 4012

To be honest i'm not sure which setup should be used or how balance it correctly...

 

I think thats only small confluence, but with lots of users...

Steven Behnke Community Champion Oct 19, 2017

Can you show us actual text from the bin/setenv.sh file and the actual output from top?

The "heap size" in there is recorded as 2Gb, which means there's no way the JVM will consume more than that.  Your settings are all healthy.

So what makes you say it consumes 13Gb, when it can't?

SetEnv.sh - https://pastebin.com/dukhCEg3

top - https://pastebin.com/X7bppTve

when i check with free -m, i got this..
total used free shared buffers cached
Mem: 15950 15123 827 0 28 944
-/+ buffers/cache: 14150 1800
Swap: 2046 0 2046

all that memory (buffer) allocates during confluence startup

so i thought thats confluences memory... 

Don't worry. Linux shows information about memory usage in a very specific way.  According to your top output, java processes actually use only 3.5Gb of memory (2.8Gb + 707Mb).

There is a second question about 2.8Gb. The answer is simple. You have configured the heap size for Java, but Java also uses metaspace as an additional memory pool that isn't limited by default, so the whole java process consumes 2.8Gb.

same problem with my install - works on a 12 GB RAM machine and uses all of the RAM within little time.

On my system there is no bin/setenv.sh.

Even TOP show 96 % load as well as VM proxmox.

System is rather slow and not stable.

I am very curious that the java task with user confluence us running twice - is that correct? Is there any place to see which task are configured by atlassian - I mean ports and services?    

 Olaf

btw. we run jira and conf. on the same server

btw.2 I have 2 different machines with atlassian tools, both behave the same  way  

If you don't have a setenv.sh then you are setting the variables needed in the environment.  Atlassian applications generally won't start at all if you don't give them an environment with all the stuff they need, including memory settings.  I'd suggest you take another look at the installation - is it an off-the-shelf install, or have you done something like extracting the application from an install and installing it in another web-server (different version of Tomcat or Glassfish etc)

thx, my setenv is located at: /opt/atalassian/confluence/bin/

 

echo "If you encounter issues starting up Confluence, please see the Installation guide at http://confluence.atlassian.com/display/DOC/Confluence+Installati$

# set the location of the pid file
if [ -z "$CATALINA_PID" ] ; then
    if [ -n "$CATALINA_BASE" ] ; then
        CATALINA_PID="$CATALINA_BASE"/work/catalina.pid
    elif [ -n "$CATALINA_HOME" ] ; then
        CATALINA_PID="$CATALINA_HOME"/work/catalina.pid
    fi
fi
export CATALINA_PID

PRGDIR=`dirname "$0"`
if [ -z "$CATALINA_BASE" ]; then
  if [ -z "$CATALINA_HOME" ]; then
    LOGBASE=$PRGDIR
    LOGTAIL=..
  else
    LOGBASE=$CATALINA_HOME
    LOGTAIL=.
  fi
else
  LOGBASE=$CATALINA_BASE
  LOGTAIL=.
fi

PUSHED_DIR=`pwd`
cd $LOGBASE
cd $LOGTAIL
LOGBASEABS=`pwd`
cd $PUSHED_DIR

 

LOGBASEABS=`pwd`
cd $PUSHED_DIR

echo ""
echo "Server startup logs are located in $LOGBASEABS/logs/catalina.out"

# Set the JVM arguments used to start Confluence. For a description of the options, see
# http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
CATALINA_OPTS="-XX:-PrintGCDetails -XX:+PrintGCDateStamps -XX:-PrintTenuringDistribution ${CATALINA_OPTS}"
CATALINA_OPTS="-Xloggc:$LOGBASEABS/logs/gc-`date +%F_%H-%M-%S`.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M ${CATALINA_OPTS}"
CATALINA_OPTS="-XX:G1ReservePercent=20 ${CATALINA_OPTS}"
CATALINA_OPTS="-Djava.awt.headless=true ${CATALINA_OPTS}"
CATALINA_OPTS="-Datlassian.plugins.enable.wait=300 ${CATALINA_OPTS}"
CATALINA_OPTS="-Xms1024m -Xmx1024m -XX:+UseG1GC ${CATALINA_OPTS}"
CATALINA_OPTS="-Dorg.apache.tomcat.websocket.DEFAULT_BUFFER_SIZE=32768 ${CATALINA_OPTS}"


export CATALINA_OPTS

so what I see is, that confluence with java is running twice and config says1 GB.

 

All of the settings are standard.

 

Olaf 

Ah, not quite, if you're on Confluence 6+ then the Confluence user will be running two processes, both java, but one is Confluence, and the other is Synchrony.  "ps -ef | grep confl" will expose that (it's worth checking)

So, the problem now is what makes you think it is consuming 12Gb of RAM, when both processes are (probably) capped at 1Gb?  There is some overhead on top of the heap, as Roman mentioned, but it shouldn't be a lot.

FWIW we see the same thing - Confluence 6.0.4

PID  USER     PR NI VIRT  RES  SHR  S %CPU %MEM TIME+     COMMAND
2837 confluen 20 0  7651m 5.8g 25m  S 74   73.9 92090:48  java


Java min and max heap size is set to 4G.

So it's using almost 2G on non-heap stuff, which is a huge amount!

Suggest an answer

Log in or Sign up to answer
How to earn badges on the Atlassian Community

How to earn badges on the Atlassian Community

Badges are a great way to show off community activity, whether you’re a newbie or a Champion.

Learn more
Community showcase
Posted Tuesday in Confluence

We want to see the templates you've created in Confluence!

Hi Community, Jessica here from the Confluence Product Marketing team!  July’s community challenge is all about sharing pictures  — and as an extension of our first post on what ...

387 views 17 9
Join discussion

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you