logstash java.lang.OutOfMemoryError: Java heap space

Problem

ELK visualizations were not loading. Looked at the logs and saw the following error:

logstash java.lang.OutOfMemoryError: Java heap space

Solution

Added the JAVA OPTS setting to the docker-compose.yml file:

    environment:
      - "LS_JAVA_OPTS=-Xms5120m -Xmx5120m"
      - "LS_HEAP_SIZE=5g"

Optionally stop the ELK containers and then run docker-compose up -d so that the containers are recreated with the new parameters:

root@whiscardz:/opt/docker-elk# docker-compose stop
Stopping logstash      ... done
Stopping kibana        ... done
Stopping elasticsearch ... done
root@whiscardz:/opt/docker-elk# docker-compose up -d
Recreating elasticsearch ... done
Recreating logstash      ... done
Recreating kibana        ... done
root@whiscardz:/opt/docker-elk#

How to check if heap was updated:

Exec into the logstash container and then run either of the following commands:

root@whiscardz:/opt/docker-elk# docker exec -it mylogstashcontainerid /bin/bash
bash-4.2$ ps -ef | grep logstash
logstash       1       0 18 09:41 ?        00:58:45 /bin/java -Dls.cgroup.cpuacct.path.override=/ -Dls.cgroup.cpu.path.override=/ -Xms5120m -Xmx5120m

OR

root@whiscardz:/opt/docker-elk# docker exec -it mylogstashcontainerid /bin/bash
bash-4.2$ jps -lvm
1 org.logstash.Logstash -Dls.cgroup.cpuacct.path.override=/ -Dls.cgroup.cpu.path.override=/ -Xms5120m -Xmx5120m
196 jdk.jcmd/sun.tools.jps.Jps -lvm -Dapplication.home=/usr/lib/jvm/java-11-openjdk-11.0.7.10-4.el7_8.x86_64 -Xms8m -Djdk.module.main=jdk.jcmd
bash-4.2$

References

How to change the JVM parameter for a Docker container

Setting JVM options for an Elasticsearch service run in a Docker container

Manually set the heap size

10 Important JVM Options for Production JAVA Application System

Getting the parameters of a running JVM

Java.lang.OutOfMemoryError: Java heap space on Elasticsearch in AWS