docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker Elasticsearch内存不足

Docker容器中Elasticsearch内存不足问题的排查与解决方案

作者:一勺菠萝丶

在使用Docker运行Elasticsearch(ES)时,可能会遇到内存不足的问题,导致ES无法启动,以下是一次完整的排查和解决过程,需要的朋友可以参考下

在使用Docker运行Elasticsearch(ES)时,可能会遇到内存不足的问题,导致ES无法启动。以下是一次完整的排查和解决过程。

问题描述

在启动ES时,日志提示如下错误:

# Native memory allocation (mmap) failed to map 5368709120 bytes for committing reserved memory.
# There is insufficient memory for the Java Runtime Environment to continue.

通过进一步检查,发现Swap空间已满,内存也几乎耗尽。

环境信息

排查步骤

检查内存和Swap使用情况

使用以下命令查看主机的内存和Swap空间:

free -h

输出结果:

              total        used        free      shared  buff/cache   available
Mem:            63G         30G        4.8G         24G         28G        1.7G
Swap:          2.0G        2.0G          0B

字段含义说明

列出高内存占用进程

使用以下命令按内存占用排序列出进程:

ps aux --sort=-%mem | head -n 15

输出部分内容:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     97476 17.2 22.3 16422848 14817344 ?   SLsl  2023 92351:21 mongod -f /mongo/config.conf
root     16140  0.5  4.1 21645120 2755200 ?    Sl    2024 2948:47 java -jar parse_gx_20210903.jar
root      1642  0.0  1.4 1590720 980608 ?      Ssl   2022  97:10 /usr/sbin/rsyslogd -n
...

分析结果

解决方案

释放内存占用

暂时停止一些非必要的服务来释放内存。

systemctl stop mongod

增加Swap空间

为避免未来出现类似问题,可以增加Swap空间。

# 创建一个新的Swap文件
dd if=/dev/zero of=/swapfile bs=1G count=4
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

检查是否生效:

free -h

调整Elasticsearch的内存配置

如果ES仍然报错,可以调整其JVM配置文件(jvm.options),降低内存需求。

-Xms2g
-Xmx2g

重启下mongo服务释放下内存

docker restart mongo

重启服务

释放内存或增加Swap后,重启Elasticsearch:

docker restart elasticsearch

总结

通过上述步骤,我们成功解决了ES因内存不足无法启动的问题。总结关键点:

到此这篇关于Docker容器中Elasticsearch内存不足问题的排查与解决方案的文章就介绍到这了,更多相关Docker Elasticsearch内存不足内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文