Elasticsearch: too many open files

本文解决Elasticsearch在平衡分片时遇到toomanyopenfiles错误的问题,通过修改Ubuntu系统配置增加最大文件描述符数量来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

elasticsearch在平衡分片的过程中,有一些分片尝试过5次移动分片之后,未成功,就会停止移动,查看分片信息,显示too many open files
在elasticsearch日志中有类似下面的日志内容:

... Caused by: java.io.FileNotFoundException: /esdata/elasticsearch/elasticsearch-cluster001/nodes/0/indices/.marvel-20 14.10.27/0/index/_fo.fdt (Too many open files)

解决思路

修改文件 /etc/security/limits.conf 在最后面添加:

* soft  nofile 500000
* hard  nofile 500000

如果是使用的ubuntu系统,还需要修改/etc/sysctl.conf文件,在最下面添加一行:

  fs.file-max = 500000 

然后修改/etc/pam.d/common-session-noninteractive,添加内容:

 session required pam_limits.so

然后重启服务器即可。

<think>嗯,用户这次的问题很明确,是关于Ubuntu系统中文件打开数量限制的调整。从用户提到的"set to 65536"这个具体数值来看,ta应该已经知道当前限制值,但需要解决如何修改的问题。用户可能是系统管理员或开发人员,遇到了资源限制相关的错误(比如"Too many open files"),需要优化系统性能。 用户提供的引用内容虽然涉及Ubuntu环境配置(Oracle安装和Nginx配置),但与本问题关联度不高。核心需要聚焦在文件描述符限制的修改方法上。这类问题通常涉及三个层面的配置:进程级限制(ulimit)、用户级限制(limits.conf)和系统级限制(sysctl)。 让我整理下解决方案的层次结构: 首先需要区分临时修改和永久修改。ulimit命令可临时生效,适合测试;而/etc/security/limits.conf和sysctl.conf才是永久解决方案。其次要注意软限制和硬限制的区别,用户需要的是提升硬限制。另外对于systemd管理的服务(如Nginx、MySQL),必须单独配置Override文件,这是很多人容易忽略的点。 考虑到用户明确提到65536这个目标值,说明ta可能正在部署特定要求的应用(如Elasticsearch或高并发服务)。在验证部分需要强调检查所有相关进程,包括通过systemd运行的服务进程。 用户可能遇到的典型错误场景包括: - 数据库连接池爆满时出现的资源错误 - Web服务器处理大量并发连接时的崩溃 - Java应用抛出的IOException 最后生成的问题扩展了应用场景(如MySQL/Nginx优化)和故障排查,这样既解决当前问题又预防后续需求。特别加入"为什么修改后不生效"这个高频问题,因为权限问题或服务重启步骤缺失是常见痛点。</think>在Ubuntu系统中调整文件打开数量限制(通常为65535或65536)需修改多个配置层级。以下是详细步骤: ### 一、临时修改(重启失效) ```bash # 查看当前会话限制 ulimit -n # 临时提升限制(例如设为65536) ulimit -n 65536 ``` ### 二、永久修改用户级限制 1. **编辑安全限制配置文件**: ```bash sudo nano /etc/security/limits.conf ``` 2. **在文件末尾添加**(示例为`*`全局生效,可替换用户名): ```conf * soft nofile 65536 * hard nofile 65536 ``` ### 三、修改系统级限制(内核参数) 1. **编辑sysctl配置文件**: ```bash sudo nano /etc/sysctl.conf ``` 2. **添加/修改参数**: ```conf fs.file-max = 2097152 # 系统总文件描述符上限 fs.inotify.max_user_instances = 1024 fs.inotify.max_user_watches = 524288 ``` 3. **应用配置**: ```bash sudo sysctl -p ``` ### 四、针对systemd服务的特殊配置 > **关键步骤**:Ubuntu 15.04+版本使用systemd,需单独配置服务单元[^1]。 1. **创建覆盖目录**: ```bash sudo mkdir -p /etc/systemd/system.conf.d/ ``` 2. **新建配置文件**: ```bash sudo nano /etc/systemd/system.conf.d/limits.conf ``` 3. **写入内容**: ```ini [Manager] DefaultLimitNOFILE=65536 ``` ### 五、重启系统生效 ```bash sudo reboot ``` ### 六、验证配置 ```bash # 检查用户进程限制 ulimit -n # 查看系统总限制 cat /proc/sys/fs/file-max # 检查特定进程限制(以nginx为例) cat /proc/$(pgrep nginx | head -1)/limits | grep "Max open files" ``` > ⚠️ **注意**: > 1. 对于Web服务器(如Nginx/Apache),需在服务配置文件(如`/etc/nginx/nginx.conf`)中同步调整`worker_rlimit_nofile`参数[^2] > 2. 数据库服务(如MySQL)需在`my.cnf`中设置`open_files_limit` > 3. 使用`lsof -u username | wc -l`可监控实际打开文件数 --- ### 常见问题排查 1. **修改后未生效**: - 检查是否遗漏systemd配置(现代Ubuntu必需) - 确认服务重启:`sudo systemctl daemon-reload && sudo systemctl restart service_name` 2. **报错"Too many open files"**: ```bash # 查看所有进程占用 lsof | awk '{print $1}' | sort | uniq -c | sort -nr | head ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值