首页 > 系统相关 >Docker容器中Elasticsearch内存不足问题排查与解决方案

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

时间:2025-01-02 22:28:48浏览次数:3  
标签:占用 jar free 内存不足 Elasticsearch Swap Docker 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空间已满,内存也几乎耗尽。


环境信息

  • 主机内存总量:63G
  • Swap空间:2G(已满)
  • 主要运行的进程:
    • mongod(占用14.8GB内存)
    • java -jar parse_gx_20210903.jar(占用2.7GB内存)
    • 多个mongosh进程(每个占用约350MB内存)

排查步骤

  1. 检查内存和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
    

    字段含义说明

    • total: 总内存大小。

    • used: 已使用的内存量。

    • free: 空闲的内存量。

    • shared: 被共享内存占用的大小。

    • buff/cache: 系统用于缓冲区和缓存的内存量。

    • available: 可用内存量,这个值比free更准确,因为它考虑了缓存可以被释放的情况。

    • Swap空间已满。

    • 可用内存仅剩1.7G,说明内存压力较大。

  2. 列出高内存占用进程

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

    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
    ...
    
  3. 分析结果

    • mongod进程占用内存最多,为14.8GB。
    • 一个Java进程占用2.7GB。
    • 多个mongosh进程共占用约4GB。

解决方案

  1. 释放内存占用

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

    systemctl stop mongod
    
  2. 增加Swap空间

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

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

    检查是否生效:

    free -h
    
  3. 调整Elasticsearch的内存配置

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

    -Xms2g
    -Xmx2g
    
  4. 重启下mongo服务释放下内存

    docker restart mongo
    
  5. 重启服务

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

    docker restart elasticsearch
    

总结

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

  • 定期监控内存和Swap使用情况。
  • 合理规划主机资源,避免服务之间竞争内存。
  • 增加Swap空间作为应急方案。
  • 重启占用内存大的mongo服务,可以释放一定内存
  • 优化ES配置,降低内存占用。

标签:占用,jar,free,内存不足,Elasticsearch,Swap,Docker,ES,内存
From: https://blog.csdn.net/weixin_39973810/article/details/144896138

相关文章

  • ElasticSearch7.10-分词器
    文章目录分词器1.字符过滤器1.介绍2.过滤html标签3.mappings过滤规则(屏蔽非文明用语)4.正则替换2.自定义分词器1.代码2.查询3.中文分词器1.下载ik分词器7.10.0版本(跟es对应)2.应用ik分词器1.进入插件目录下创建一个ik目录2.将下载的压缩包上传上去3.安装unzip并解压1.......
  • Elasticsearch VS Easysearch 性能测试
    压测环境虚拟机配置使用阿里云上规格:ecs.u1-c1m4.4xlarge,PL2:单盘IOPS性能上限10万(适用的云盘容量范围:461GiB-64TiB)vCPU内存(GiB)磁盘(GB)带宽(Gbit/s)数量1664500500024Easysearch配置7节点集群,版本:1.9.0实例名内网IP软件vCPUJVM磁......
  • GraphRAG实践:docker部署neo4j
    概述随着图数据库(GraphDatabase)的流行,越来越多的应用场景开始采用图数据库来处理复杂的关系数据。Neo4j作为领先的图数据库之一,提供了强大的图形查询语言Cypher、高效的存储结构和丰富的生态系统,使得它成为开发人员构建关联性数据分析应用的理想选择。本文将指导您如何使......
  • k8s系列--通过docker拉取的镜像导入到 containerd中
    要将通过dockerpull拉取的镜像导入到containerd中,可以按照以下步骤操作:步骤1:使用docker将镜像保存为tar文件dockerpullregistry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.11.1dockersaveregistry.cn-hangzhou.aliyuncs.com/google_containe......
  • docker-compose 搭建ci/cd
    使用Docker Compose搭建CI/CD环境是一种流行的做法,因为它允许你轻松地管理和部署多个服务。下面是一套基于Docker Compose的CI/CD平台推荐方案,包括Jenkins作为CI/CD工具,GitLab作为代码仓库,以及Nginx作为反向代理。此外,还包括了数据库和缓存服务,以支持这些工具的运行。环境需求......
  • docker 镜像上传下载,及构建java项目镜像心得
    docker在服务部署中是比较方便,并且在部署过程中出现问题的几率较低。本文对基础的docker项目部署做简单介绍1、安装docker和docker-compose,网上都有自行搜索2、拉取官方镜像①、拉官方镜像需要有镜像服务器,没有镜像服务器会报错,好用的镜像服务器都是收费的,不收费的大部分用不......
  • Docker 入门指南
    简介Docker是一个开源的容器化平台,革命性地简化了应用程序的部署和管理。想象它就像是一个轻量级的"搬家专家",能将应用程序及其所有依赖打包到一个标准化的容器中,确保无论在哪里运行,都能保持一致的环境和性能。Dockervs虚拟机:特性Docker虚拟机虚拟化方式操作系统级别......
  • docker基本概念,docker镜像管理,docker命令
    docker基本概念镜像管理docker命令一.docker 1.基本概念 (1)docker:能够将程序和环境进行打包的工具 (2)容器:自带独立运行环境的特殊进程 (3)镜像:镜像可以被理解为一个模板,通过这个模板可以实例化出很多容器,包含容器所需的所有文件和配置信息. (4)仓库:用来存储......
  • 【Elasticsearch】集群配置深度解析与实践
    ......
  • Elasticsearch:基础概念
    一、什么是ElasticsearchElasticsearch是基于ApacheLucene构建的分布式搜索和分析引擎、可扩展数据存储和矢量数据库。它针对生产规模工作负载的速度和相关性进行了优化。使用Elasticsearch可以近乎实时地搜索、索引、存储和分析各种形状和大小的数据。Elasticsearch......