当前位置: 首页 > news >正文

Docker-Compose部署 EasySearch 异常问题排查

近期将原本运行在 macOS 上的 EasySearch、Console 和 Coco-server 等服务迁移至群晖 NAS 平台。在迁移过程中遇到了EasySearch容器无法正常启动或运行中意外终止的问题。本文记录了这些问题的具体表现及解决方案,旨在为后续类似部署提供参考。

基础部署配置

以下是官方推荐的 docker-compose 配置文件:
地址如下:

https://docs.infinilabs.com/easysearch/main/docs/getting-started/install/docker-compose/

version: "3"
services:
  easysearch-node1:
    user: "602:602"
    image: infinilabs/easysearch:1.11.1-2000
    container_name: easysearch-node1
    hostname: easysearch-node1
    environment:
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - $PWD/ezs1/config:/app/easysearch/config
      - $PWD/ezs1/data:/app/easysearch/data
      - $PWD/ezs1/logs:/app/easysearch/logs
    ports:
      - 9201:9200
      - 9301:9300
    networks:
      - esnet

  easysearch-node2:
    user: "602:602"
    image: infinilabs/easysearch:1.11.1-2000
    container_name: easysearch-node2
    hostname: easysearch-node2
    environment:
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - $PWD/ezs2/config:/app/easysearch/config
      - $PWD/ezs2/data:/app/easysearch/data
      - $PWD/ezs2/logs:/app/easysearch/logs
    ports:
      - 9202:9200
      - 9302:9300
    networks:
      - esnet

  console:
    image: infinilabs/console:1.29.1-2000
    container_name: console
    hostname: console
    volumes:
      - $PWD/console/data:/data
      - $PWD/console/log:/log
    networks:
      - esnet
    ports:
      - 9000:9000
    links:
      - easysearch-node1:es1
      - easysearch-node2:es2
    environment:
      - TZ=Asia/Shanghai

networks:
  esnet:
    driver: bridge
    ipam:
      config:
        - subnet: 172.24.0.0/16

常见问题及解决方案

问题1:vm.max_map_count 参数不足

错误提示:

[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
问题分析

Lucene 搜索引擎在运行过程中需要创建大量内存映射文件(mmap),而 Linux 系统默认的虚拟内存区域数量限制(65530)无法满足需求。

解决方案

临时设置(重启失效)

sudo sysctl -w vm.max_map_count=262144

永久生效配置

  1. 编辑 /etc/sysctl.conf 文件
  2. 添加配置项:
    vm.max_map_count=262144
    
  3. 应用配置:
    sudo sysctl -p
    

问题2:Java堆内存溢出

错误信息:

java.lang.OutOfMemoryError: Java heap space
问题分析

容器化环境中,JVM默认的内存分配策略往往无法正确识别可用的系统资源,导致:

  1. 堆内存分配不足(默认通常仅512MB-1GB)
  2. 内存使用超出容器限制后被系统强制终止
解决方案

修改docker-compose配置,明确指定JVM堆内存:

environment:
  - ES_JAVA_OPTS=-Xms2g -Xmx2g

配置建议:

  1. 堆内存设置为物理内存的50%以内
  2. 最大堆内存不超过32GB(避免指针压缩失效)
  3. 初始堆(-Xms)和最大堆(-Xmx)设为相同值,避免运行时动态调整

这次是部署过程中踩的两个坑,写出来让大家避避雷。

相关文章:

  • 探索AI的无限可能,体验智能对话的未来,大模型 API 演示
  • Qt 高效读写JSON文件,玩转QJsonDocument与QJsonObject
  • Unity跨平台构建快速回顾
  • [React 进阶系列] 组合组件 复合组件
  • Ubuntu系统使用nmcli配置静态IP
  • 机器学习之条件概率
  • 知识篇 | Oracle的 TEMP表空间管理和优化
  • 【Java语言】学习笔记-08面向对象【中级】继承的本质分析、快速入门、方法重写、Super关键字的基本语法和使用等细节详解(中)
  • Rust+WebAssembly:开启浏览器3D渲染新时代
  • 微信自动跟圈指南;一个号发其他号自动转发
  • 【AndroidRTC-10】webrtc是如何确定双端的编解码类型?
  • GC overhead limit exceeded---Java 虚拟机 (JVM) 在进行垃圾回收内存量非常少解决
  • 【机器人】复现 GrainGrasp 精细指导的灵巧手抓取
  • Android开发检查是否是各大厂商手机的工具类
  • Redis 服务搭建
  • Spring MVC的请求和响应
  • JavaScript 函数基础
  • IoTDB看门狗配置后不生效
  • 算法 | 小龙虾优化算法原理,引言,公式,算法改进综述,应用场景及matlab完整代码
  • ISIS-2 邻居建立关系
  • 上海古镇“长效”发展需要提高社会资本参与
  • 视频|力箭一号“一箭6星”,将多颗高分辨率遥感卫星送入太空
  • 联合国妇女署:超过2.8万名妇女和女童在加沙战火中丧生
  • 秦洪看盘|热门股或将退潮,短线波动难免
  • 英国研究:近七成年轻人认为上网有害心理健康
  • 法国参议院调查委员会公布雀巢“巴黎水”丑闻调查报告