【踩坑日记】Docker elasticsearch too many open files问题处理

项目场景:

使用单机ES作为日志存储数据库,每日生成一个日期索引,由于每日的数据量可能较大,有时候需要进行磁盘扩容操作,本次问题记录还未找到根本的触发原因,后续找到原因后再进行记录


问题描述

每日创建es索引时发现报错:elasticsearch. java.net.SocketTimeoutException: 30,000 milliseconds timeout;查询es数据时也出现请求返回较慢和连接超时的情况


原因分析:

猜测问题产生的情况

1. 大量请求插入es

2. 内存不足

3. 磁盘不足

解决方案:

 1,停止插入请求,排除大量请求问题

2.查看内存和磁盘使用情况,排除内存和磁盘问题影响

3. 查看docker中ES的日志发现有大量的:too many open files 错误日志,经过查询可能是打开句柄书超过系统设置的句柄总数导致。

详细排查流程如下:
查看系统总句柄数
ulimit -Sn
#【结果:65536】

查看ES容器进程详情(获取ES的进程pid)
docker top <ES容器ID>
#【结果:2205】

查看ES进程目前的文件打开数以及限制
cat /proc/2205/limits
#【结果:65536】

查看进程使用句柄数
ls -l /proc/2205/fd/* |wc -l
#【结果:65535】

#可以看出ES容器使用的句柄数已经基本等于系统最大的句柄总数,所以才导致too many open files的异常出现

#临时动态修改ES当前进程的nofile限制
prlimit --pid 2205 --nofile=655360:655360    #将pid进程的nofile限制调整为655360 

# docker run 方式修改进程句柄数限制
docker run -d -p 9200:9200 -p 9300:9300  --restart=always \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms31g -Xmx31g" \
-e "xpack.security.enabled=false" \
--name elasticsearch \
--ulimit nofile=655350:655350  \...




作者这里是使用:临时修改进程最大句柄数的方式解决问题,修改后创建索引和查询数据的问题得到解决;

总结

这边只是记录作者这边问题的处理方式,目前为何句柄数会使用这么多还没找到问题,

查看了一篇文章的说法是:在系统扩容的过程中,会有大量的数据被平衡到新的节点,这样会消耗大量的IO,同时,elk集群中的新数据,由于没有对数据节点做冷热区分,会源源不断的写入到新节点,这就造成了新节点中的段会非常多,旧的段无法合并,新的数据又在源源不断的写入,这就造成了文件数会越来越多,因此出现了上述问题; 目前不确定是不是这个原因,因为我是单机ES

参考链接:解决elasticsearch“Too many open files in system”问题-腾讯云开发者社区-腾讯云

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker报错"too many open files"是由于句柄数不够导致的问题。句柄是操作系统用于跟踪文件的标识符,当打开文件或套接字时,操作系统会为其分配一个句柄。如果句柄数达到了系统设置的限制,就会出现"too many open files"的错误。 要解决这个问题,可以通过增加系统的句柄数限制来解决。可以通过修改操作系统的配置文件来进行设置,例如在Linux系统中,可以通过修改/etc/security/limits.conf文件来增加句柄数限制。 另外,还可以通过优化Docker的配置来减少句柄的使用量。可以通过减少容器的数量或者调整容器的资源限制来减少句柄的使用。 此外,还可以使用一些命令来查看和监控句柄的使用情况,例如使用lsof命令可以查看当前系统中打开的文件和套接字的列表。 总之,要解决Docker报错"too many open files",可以增加系统的句柄数限制,优化Docker的配置以减少句柄的使用量,并使用相关命令来查看和监控句柄的使用情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [docker too many open files解决方式](https://blog.csdn.net/weixin_40579389/article/details/130133982)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [微服务项目容器编排docker-compose.yml、Dockerfile文件模板、相关配置文件、shell脚本](https://download.csdn.net/download/qq_45629145/88248761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值