Insufficient memory problem and solution when docker starts elasticsearch

Insufficient memory problem and solution when docker starts elasticsearch

question

Insufficient memory when docker installs and starts elasticsearch

System centos8 (Alibaba Cloud ecs server)

[root@iZ2zeczvvb79boy368xppwZ ~]# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)

Installation Process

docker pull elasticsearch:6.4.0

Modify the virtual machine memory (seemingly has no effect)

sysctl -w vm.max_map_count=262144

Run the container using the docker run command

docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=single-node" \
-e "cluster.name=elasticsearch" \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:6.4.0

Docker ps shows that the container is not started

[root@iZ2zeczvvb79boy368xppwZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
edfc400862eb rabbitmq:3.7.15 "docker-entrypoint.s..." 14 hours ago Up 14 hours 0.0.0.0:4369->4369/tcp, 0.0.0.0:5671-5672->5671-5672/tcp, 0.0.0.0:15671-15672->15671-15672/tcp, 0.0.0.0:25672->25672/tcp rabbitmq
2ae2f3f8dc1f nginx:1.10 "nginx -g 'daemon of..." 2 weeks ago Up 2 weeks 0.0.0.0:80->80/tcp, 443/tcp nginx
164e4e7561df redis:3.2 "docker-entrypoint.s..." 2 weeks ago Up 2 weeks 0.0.0.0:6379->6379/tcp redis
eeabe57f1f21 mysql:5.7 "docker-entrypoint.s…" 2 weeks ago Up 2 weeks 0.0.0.0:3306->3306/tcp, 33060/tcp mysql

docker ps -a to see that the container is indeed created

[root@iZ2zeczvvb79boy368xppwZ ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
767829ae1d7c elasticsearch:6.4.0 "/usr/local/bin/dock…" About a minute ago Exited (1) About a minute ago elasticsearch
edfc400862eb rabbitmq:3.7.15 "docker-entrypoint.s..." 14 hours ago Up 14 hours 0.0.0.0:4369->4369/tcp, 0.0.0.0:5671-5672->5671-5672/tcp, 0.0.0.0:15671-15672->15671-15672/tcp, 0.0.0.0:25672->25672/tcp rabbitmq
2ae2f3f8dc1f nginx:1.10 "nginx -g 'daemon of..." 2 weeks ago Up 2 weeks 0.0.0.0:80->80/tcp, 443/tcp nginx
164e4e7561df redis:3.2 "docker-entrypoint.s..." 2 weeks ago Up 2 weeks 0.0.0.0:6379->6379/tcp redis
eeabe57f1f21 mysql:5.7 "docker-entrypoint.s…" 2 weeks ago Up 2 weeks 0.0.0.0:3306->3306/tcp, 33060/tcp mysql

Check the logs. Run the docker logs -f elasticsearch command to check the logs and find that the jvm memory is insufficient.

[root@iZ2zeczvvb79boy368xppwZ ~]# docker logs -f elasticsearch
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007ebf15330000, 549668585472, 0) failed; error='Not enough space' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 549668585472 bytes for committing reserved memory.
# An error report file with more information is saved as:
# logs/hs_err_pid1.log

Workaround

Modify the jvm.options file configuration First find the jvm.options file location (the location of each server may be different)

[root@iZ2zeczvvb79boy368xppwZ ~]# find / -name jvm.options
/var/lib/docker/overlay2/d399872a3517b4d4acb0d2f70d0625c0f38251ffe5819a1cea00f8213de3e7f5/diff/usr/share/elasticsearch/config/jvm.options

vim enters the file to modify the minimum memory of the virtual machine

[root@iZ2zeczvvb79boy368xppwZ ~]# vim /var/lib/docker/overlay2/d399872a3517b4d4acb0d2f70d0625c0f38251ffe5819a1cea00f8213de3e7f5/diff/usr/share/elasticsearch/config/jvm.options

Find the -Xms property and change it to 512m (my elasticsearch:6.4.0 defaults to 1g)

## JVM configuration

################################################################
## IMPORTANT: JVM heap size
################################################################
##
## You should always set the min and max JVM heap
## size to the same value. For example, to set
## the heap to 4 GB, set:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##
################################################################

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms512m
-Xmx512m

Save and exit

In vim, press i to enter editing mode, press ESC to exit editing mode, press : to enter command mode, and then enter w to save, q to exit, and q! to force exit in the command line at the bottom.
Start the container again and run docker ps to see if the container started successfully.

[root@iZ2zeczvvb79boy368xppwZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f5c4ed61196b elasticsearch:6.4.0 "/usr/local/bin/dock…" 15 minutes ago Up 15 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch
edfc400862eb rabbitmq:3.7.15 "docker-entrypoint.s..." 15 hours ago Up 15 hours 0.0.0.0:4369->4369/tcp, 0.0.0.0:5671-5672->5671-5672/tcp, 0.0.0.0:15671-15672->15671-15672/tcp, 0.0.0.0:25672->25672/tcp rabbitmq
2ae2f3f8dc1f nginx:1.10 "nginx -g 'daemon of..." 2 weeks ago Up 2 weeks 0.0.0.0:80->80/tcp, 443/tcp nginx
164e4e7561df redis:3.2 "docker-entrypoint.s..." 2 weeks ago Up 2 weeks 0.0.0.0:6379->6379/tcp redis
eeabe57f1f21 mysql:5.7 "docker-entrypoint.s…" 2 weeks ago Up 2 weeks 0.0.0.0:3306->3306/tcp, 33060/tcp mysql

Summarize

This is the end of this article about the insufficient memory problem and solution when docker starts elasticsearch. For more relevant content about insufficient memory when docker starts elasticsearch, please search 123WORDPRESS.COM's previous articles or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • Solve the problem that Elasticsearch fails to start due to jdk version problems
  • Docker starts the elasticsearch image and solves the error after mounting the directory
  • Solve the problem of Docker starting Elasticsearch7.x and reporting an error
  • elasticsearch startup warning unable to lock JVM memory
  • Elasticsearch injects Node assembly startup process through guice

<<:  Implementation of two-way binding of parent-child component data in front-end framework Vue

>>:  MySQL uses aggregate functions to query a single table

Recommend

Vue2.x - Example of using anti-shake and throttling

Table of contents utils: Use in vue: explain: Ima...

Solution to MySQL being unable to start due to excessive memory configuration

Problem Description MySQL reports an error when s...

Implementation of Vue single file component

I recently read about vue. I found a single-file ...

MySQL trigger syntax and application examples

This article uses examples to illustrate the synt...

How to mount a new disk on a Linux cloud server

background A new server was added in the company,...

Detailed explanation of the use cases of Vue listeners

The first one is to use jQuery's ajax to send...

How to query and update the same table in MySQL database at the same time

In ordinary projects, I often encounter this prob...

Will the index be used in the MySQL query condition?

When an employer asks you whether an index will b...

This article will show you what Vite does to the browser's request

Table of contents Working principle: What does th...

How to use CSS to center a box horizontally and vertically (8 methods)

Original code: center.html : <!DOCTYPE html>...

Mysql query the most recent record of the sql statement (optimization)

The worst option is to sort the results by time a...

Docker View Process, Memory, and Cup Consumption

Docker view process, memory, cup consumption Star...

Binary installation of mysql 5.7.23 under CentOS7

The installation information on the Internet is u...

Detailed explanation on how to modify the default port of nginx

First find out where the configuration file is wh...