max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
最近有台服务器需要停机维护,停机前把这台机器上的elasticsearch节点停掉了,维护完后,发现启动不了了,报了上面的错误
我是使用普通帐号elk登录的系统,这个时候查看 ulimit -Hn 的值是4096
sudo su到root 帐号,ulimit -Hn的值却是符合elasticsearch启动要求的, exit回到 普通帐号却不行
最后我在root下su elk切换到了普通帐号,这个时候就可以了
错误缘由分析
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535] 这个错误提示表明 Elasticsearch 进程允许打开的最大文件描述符数量过低,至少需要 65535 才能正常启动。文件描述符限制一般是由操作系统对每个用户或进程进行限制的,不同用户和不同的登录方式可能会有不同的限制设置。
不同登录方式下 ulimit 值不同的缘由
1. 普通用户登录
当使用普通帐号 elk 登录系统时,ulimit -Hn 的值是 4096,这是由于普通用户的资源限制一般是由系统的默认配置文件(如 /etc/security/limits.conf )或者用户的环境配置文件(如 ~/.bashrc 、 ~/.bash_profile 等)所设置的。这些配置文件中的设置会在用户登录时生效,普通用户的权限相对较低,可能会受到更严格的资源限制。
2. sudo su 到 root 帐号
当使用 sudo su 切换到 root 帐号时,ulimit -Hn 的值符合 Elasticsearch 启动要求。这是由于 root 用户具有最高权限,系统对 root 用户的资源限制一般会更宽松,或者 root 用户的环境配置文件中对文件描述符限制进行了更高的设置。
3. root 下 su elk 切换到普通帐号
当在 root 下使用 su elk 切换到普通帐号时,文件描述符限制却符合要求了。这是由于 su 命令在切换用户时,默认会继承当前用户(这里是 root)的环境变量和部分配置,包括 ulimit 的设置。所以,从 root 切换到 elk 用户时,elk 用户临时拥有了和 root 用户一样的文件描述符限制。
解决方案
为了让普通用户 elk 在正常登录时也能拥有足够的文件描述符限制,你可以通过修改系统配置文件来实现。
1. 修改 /etc/security/limits.conf 文件
使用 sudo 权限编辑 /etc/security/limits.conf 文件,添加或修改以下内容:
elk hard nofile 65535
elk soft nofile 65535
这里的 elk 是你的普通用户名,hard 表明硬限制,soft 表明软限制,nofile 表明文件描述符限制。将硬限制和软限制都设置为 65535。
2. 修改 /etc/pam.d/common-session 文件
确保 pam_limits.so 模块被加载,编辑 /etc/pam.d/common-session 文件,添加或确认以下行存在:
session required pam_limits.so
3. 重新登录
修改完成后,注销当前用户并重新使用普通用户 elk 登录系统,再次查看 ulimit -Hn 的值,应该已经变为 65535,此时就可以正常启动 Elasticsearch 了。