What is the correct way to set Java memory parameters in docker-compose.yml

Been having some performance issues and a lot of java.lang.OutOfMemoryError: GC overhead limit exceeded errors.

I have tried
-JAVA_OPTIONS=-Xmx2048m -Xms512m
and

  • JVM_OPTS=-Xms800m -Xmx1600m
    and
  • CATALINA_OPTS=-Xms1024m -Xmx2048m

in the “environment:” section of “web:” service using image xwiki:10.11-postgres-tomcat ( https://hub.docker.com/_/xwiki/ )

When I look in the docker logs, I see this:
03-Jan-2019 17:54:39.547 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx1024m

How do I pass a higher setting?

We have 25 active users.

Good question. I don’t know, would need to try it.

All I know is that by default, we copy this file: xwiki-docker/template/tomcat/setenv.sh at master · xwiki/xwiki-docker · GitHub at xwiki-docker/template/Dockerfile at master · xwiki/xwiki-docker · GitHub

Exception in thread “http-nio-8080-Acceptor-0” java.lang.OutOfMemoryError: Java heap space

Every time that happens I have to restart the docker container :frowning:

FWIW I’ve followed the documentation (see GitHub - xwiki/xwiki-docker: Dockerfile to build and run XWiki on docker) and tried it with docker run --net=xwiki-nw --name xwiki -p 8080:8080 -v /tmp/xwiki:/usr/local/xwiki -e DB_USER=xwiki -e DB_PASSWORD=xwiki -e DB_DATABASE=xwiki -e DB_HOST=mysql-xwiki -e JAVA_OPTS="-Xmx2048m" xwiki:mysql-tomcat.

When Tomcat starts I get:

04-Jan-2019 07:27:08.529 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.37
04-Jan-2019 07:27:08.535 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Dec 12 2018 12:07:02 UTC
04-Jan-2019 07:27:08.536 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.5.37.0
04-Jan-2019 07:27:08.537 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
04-Jan-2019 07:27:08.537 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            4.9.125-linuxkit
04-Jan-2019 07:27:08.537 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
04-Jan-2019 07:27:08.538 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/lib/jvm/java-8-openjdk-amd64/jre
04-Jan-2019 07:27:08.538 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.8.0_181-8u181-b13-2~deb9u1-b13
04-Jan-2019 07:27:08.539 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
04-Jan-2019 07:27:08.539 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
04-Jan-2019 07:27:08.540 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
04-Jan-2019 07:27:08.540 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
04-Jan-2019 07:27:08.541 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
04-Jan-2019 07:27:08.542 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx2048m
04-Jan-2019 07:27:08.542 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
04-Jan-2019 07:27:08.547 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
04-Jan-2019 07:27:08.547 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
04-Jan-2019 07:27:08.548 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx1024m
04-Jan-2019 07:27:08.548 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
04-Jan-2019 07:27:08.549 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true
04-Jan-2019 07:27:08.549 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dsecurerandom.source=file:/dev/urandom
04-Jan-2019 07:27:08.550 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
04-Jan-2019 07:27:08.550 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
04-Jan-2019 07:27:08.551 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
04-Jan-2019 07:27:08.551 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp

Notice the 2 lines:

04-Jan-2019 07:27:08.542 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx2048m
...
04-Jan-2019 07:27:08.548 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx1024m

Then I created a page with the content from https://snippets.xwiki.org/xwiki/bin/view/Extension/Available%20Memory and got:

Current size of heap in bytes: 650641408
Maximum size of heap in bytes. 954728448
Amount of free memory within the heap in bytes: 101382832

So I can confirm that the value used is 1024m(i.e. the last one).

Thus this solution doesn’t work to override any value defined in setenv.sh.

Please raise an issue on XWiki Docker images - XWiki.org JIRA and I’ll have a look.

Thanks

Ok I’ve done it: Loading...

And it’s now implemented. See comments in the jira issue.