linux 系统下open-file文件数限制修改

         由于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到底是什么

你可能感兴趣的:(linux)