Elasticsearch内存溢出解决

突然es访问不了,查看日志显示内存溢出如下图所示:

解决办法:

我创建容器的时候设置的为:ES_JAVA_OPTS="-Xms1024m -Xmx1024m"

基于自己服务器的情况,我删除了原先的容器(es01是我节点一的容器名)

docker rm -f es01

重新创建容器且修改内存配置为ES_JAVA_OPTS="-Xms4g -Xmx4g"

docker run --restart=always  --network=elastic -d -p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPTS="-Xms4g -Xmx4g" \
-e "discovery.type=zen" \
-v /mnt/es01/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mnt/es01/data:/usr/share/elasticsearch/data \
--name es01 elasticsearch:7.11.2

查看容器日志报错大概信息是认证出问题了如下图

修改认证文件权限

chmod -R 777 /mnt/elastic-certificates.p12

将认证文件复制到容器中

docker cp /mnt/elastic-certificates.p12 es01:/usr/share/elasticsearch/config

然后重启容器 docker restart es01 查看日志发现成功启动

查看容器配置

docker inspect es01

可以看到内存大小已修改为4g

至此问题解决。

### 解决Elasticsearch插入操作中的OutOfMemoryError 当遇到Elasticsearch在执行插入操作时发生`OutOfMemoryError`的情况,通常是因为JVM堆内存不足所引起的。为了有效处理这个问题,可以从以下几个方面着手: #### 调整JVM堆大小设置 调整Elasticsearch运行的Java虚拟机(JVM)的最大堆空间参数可以缓解此问题。默认情况下,Elasticsearch会自动配置合理的最大堆尺寸,但对于大规模索引场景可能仍需手动优化。建议将heap size设定为物理RAM的一半左右,并不超过32GB以保持压缩指针的优势。 对于启动脚本中定义的ES_JAVA_OPTS环境变量来修改-Xms(初始堆大小)和-Xmx(最大堆大小),例如: ```bash export ES_JAVA_OPTS="-Xms4g -Xmx4g" ``` 这确保了有足够的临时存储供批量写入期间的数据缓冲使用[^1]。 #### 启用并调优刷新间隔(Refresh Interval) 通过适当延长index.refresh_interval的时间长度,能够减少不必要的频繁磁盘同步动作,从而降低GC压力以及提高吞吐量。可以在创建索引模板或更新现有索引设置时完成这项工作。 ```json PUT /my-index/_settings { "index": { "refresh_interval": "30s" } } ``` 这样的改动有助于平衡实时性和性能之间的关系,在不影响查询响应速度的前提下提升批处理效率。 #### 使用Bulk API进行高效数据导入 采用批量请求方式代替单条记录提交可显著改善整体表现。Bulk API允许一次发送多个文档到指定的目标集合内,减少了网络往返次数的同时也减轻了客户端和服务端双方的工作负担。 下面是一个简单的Python代码片段展示如何利用bulk helper函数实现多线程并发上传任务: ```python from elasticsearch import Elasticsearch, helpers es_client = Elasticsearch() actions = [ {"_op_type": "create", "_source": doc} for doc in documents_to_index ] helpers.bulk(es_client, actions, chunk_size=500, request_timeout=60) ``` 这里设置了每次传输大约500个文档作为批次单位,并给予较长超时期限以便应对较大规模的数据集。 #### 设置合适的分片数量 合理规划集群内的shard数目同样重要。过多的小型碎片不仅占用额外资源还会拖慢检索过程;反之过少则可能导致热点分布不均进而影响扩展能力。因此应当基于预期容量及访问模式综合考量最佳实践方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值