Enabling G1GC in Docker ELK's Elasticsearch

Update 22 Oct 2019: Using G1GC did bring down the CPU usage a bit, but the excessive CPU usage is caused by an Elasticsearch bug described in this GitHub issue.

There are some GC issues causing Elasticsearch in the ELK stack to freeze and hit 100% CPU usage. The ELK is setup using docker-elk.

Elasticsearch 6.5 comes with G1GC support according to this official post. Let’s see if it helps.

In docker-compose.yml:

  elasticsearch:
    build:
      context: elasticsearch/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk

Change the line:

ES_JAVA_OPTS: "-Xmx256m -Xms256m"

to

ES_JAVA_OPTS: "-Xmx256m -Xms256m -XX:-UseConcMarkSweepGC -XX:-UseCMSInitiatingOccupancyOnly -XX:+UseG1GC -XX:InitiatingHeapOccupancyPercent=75"

Of course you should always set the right heap size.

Tags// , , ,