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

How to restore a database and a table from a MySQL full database backup

In the official MySQL dump tool, how can I restor...

Getting Started with Front-End Vue Unit Testing

Table of contents 1. Why do we need unit testing?...

A detailed introduction to HTML page loading and parsing process

The order in which the browser loads and renders H...

Use of MySQL DDL statements

Preface The language classification of SQL mainly...

Let’s take a look at JavaScript precompilation (summary)

JS running trilogy js running code is divided int...

mysql 8.0.19 winx64.zip installation tutorial

This article records the installation tutorial of...

Tutorial on installing and configuring remote login to MySQL under Ubuntu

This article shares the MySQL installation and co...

Web page creation question: Image file path

This article is original by 123WORDPRESS.COM Ligh...

mysql: [ERROR] unknown option '--skip-grant-tables'

MySQL database reports ERROR 1045 (28000): Access...

A brief discussion on the mysql execution process and sequence

Table of contents 1:mysql execution process 1.1: ...