由于druid的大查询会产生很多临时的中间文件,如/tmp/druid/druid-groupBy-27e88733-d1f1-4589-bf63-ef3a40d4d945_273009ff-02cd-4085-b9f6-e94c7931111c/02135564.tmp (Too many open files)",会造成查询中断,需修改相应的系统的open file限制,其中存在以下条件约束。
(1)所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max
(2)单个进程打开的文件描述符数不能超过user limit中nofile的soft limit
(3)nofile的soft limit不能超过其hard limit
(4)nofile的hard limit不能超过/proc/sys/fs/nr_open
本人服务器版本为 3.10.0-229.el7.x86_64 ,则修改open file值步骤如下:
1:通过ulimit -a 查看系统所有的limit信息。
2:查看nr_open值 cat /proc/sys/fs/nr_open
系统默认的nr_open 值为1024*1024=1048576,如果要修改的open files的值要小于1048576的话,则参考步骤3,否则参考步骤4
3: 如果要修改的open files< 1048576的情况下,vi /etc/security/limits.conf 添加
* soft nofile xxxx
* hard nofile xxxx
xxxx 的值小于1048576,退出终端,重新登录,ulimit -a 查看修改是否成功;重启服务器,重新登录,ulimit -a 查看修改是否成功
4: 如果要修改的open files > 1048576的情况下,则首先需要增大nr_open的默认值,
(1)在vi /etc/sysctl.conf 中增加 fs.nr_open=3269420,在SSH 端执行 sysctl -p 使配置生效。 经过测试退出SSH之后重新SSH ,通过查看cat /etc/sys/fs/nr_open 配置生效,但是服务器重启的情况下,配置失效,不启作用。
(2)针对(1)中情况,解决方案如下 ,在/etc/bashrc中添加sysctl -p 命令,当每当SSH 登录时会执行sysctl - p命令,则nr_open的配置会生效。
(3)重要! 此时不要在/etc/security/limits.conf 中永久性的修改nofile的值,经测试,如果在/etc/security/limits.conf 修改nofile值,则导致服务器重启SSH无法连接,同样在/etc/bashrc的 sysctl -p 之后添加命令ulimit -SHn xxxx ,XXXX值的为要修改的大小,这样每个SSH终端登录,会使nr_open值生效,并手动设置nofile 的值。
(4)综合(1)(2)(3)可解决open files > 1048576的修改。
5: chcon system_u:object_r:etc_t:s0 /etc/security/limits.conf
执行此命令是增加selinux 访问权限,避免SSH 启动终端无法访问/etc/security/limits.conf,此命令为AWS服务人员推荐。关于selinux可参考推荐文章1
参考文章:
:1:一文彻底明白linux中的selinux到底是什么