• CentOS最大文件描述符限制更改


      系统级的限制:/proc/sys/fs/file-max中设定了系统最大能打开的文件数。
        查看该值可以用如下方式:
          [root@#panda ~]# cat /proc/sys/fs/file-max
          655351
          [root@#panda ~]# sysctl fs.file-max
          fs.file-max = 655351
          [root@#panda ~]#
        修改该值可以用如下方式:
          [root@#panda ~]# echo 655300 > /proc/sys/fs/file-max
          [root@#panda ~]# sysctl fs.file-max
          fs.file-max = 655300
          [root@#panda ~]# sysctl -w fs.file-max=655350
          fs.file-max = 655350
          [root@#panda ~]# sysctl fs.file-max
          fs.file-max = 655350
          [root@#panda ~]#
        上面方式修改的值会立即生效但是机器重启后又会失效。永久生效的修改可以用下面的方式:
          [root@#panda etc]# echo fs.file-max=524288 >> /etc/sysctl.conf
          [root@#panda etc]# sysctl fs.file-max
          fs.file-max = 655350
          [root@#panda etc]# sysctl -p
          fs.file-max = 524288
          [root@#panda etc]# sysctl fs.file-max
          fs.file-max = 524288
          [root@#panda etc]#
        执行了sysctl -p 命令之后 sysctl.conf中的修改才能立即生效。
        还有一个问题是file-max最大能设置多大呢?当然你可以把它往大了设,但是同时打开的文件描述符越多,内存开销就越大。那怎样设置一个合理的上限呢?一个经验算法是 256个fd 需4M内存。例如8G内存,8*1024/4*256=524288。

      用户级的限制:/etc/security/limits.conf 可以添加用户使用资源的限制
        设置格式为:
          username|@groupname type resource limit
          username|@groupname:设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有用户的限制。
          type:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比hard 限制高。用 - 就表明同时设置了 soft 和 hard 的值
          resource: 为资源类型有多种。 nofile为最大打开文件数。
          例如:* -  nofile 655350   将所有用户的最大打开文件数的soft和hard都设为655350
        对/etc/security/limit.conf的修改会在新的会话期中生效

      会话级的限制:ulimit 命令查看和设置当前会话期的资源限制

        ulimit -Sn 查看会话期最大文件描述符soft限制
        ulimit -Hn 查看会话期最大文件描述符hard限制,hard限制是soft的上限。
        ulimit -Sn 2046 限制当前会话期内能打开的文件数为2046(如果其中一个进程打开了2046个,其他进程再打文件都将失败)。
        ulimit -Sn 查看到的默认1024,用ulimit所做的修改在会话期结束后都将失效。那如何让对会话级的资源限制设置永久生效呢?可以把ulimit 命令放到会话建立时初始化的过程中执行,这样每次会话期就都自动执行命令修改设置了。例如在用户目录下的.bashrc 中加入一行 ulimit -Sn 2046,要对所有用户都生效则可在/etc/profile中加入一行命令 ulimit -Sn 2046。容易被忽略的一点是,如果我们设置了用户级的限制,新建的会话期的资源限制的初值(ulimit -Sn 查看到的)是从用户级的限制值(/etc/security/limit.conf中设置的值)继承过来的。

    进程级的管理:进程可以调用getrlimit和setrlimit来设置和修改对应资源的限制。
      例如: 
            rlimit tmp={4095,4096};
          setrlimit(RLIMIT_NOFILE,&tmp);    //设置进程打开文件数的软硬限制分别为4095,4096

    总结:单个进程最大能使用的文件描述符是由系统限制,用户限制,会话期限制,进程限制值中最小的那个决定的。如果我们在一台机器上部署了自己的网络服务,我们只需按下面步骤修改就可以了:
      1. 计算 fdmax = 物理内存大小(m为单位) / 4 * 256  假设内存为8G,fdmax=524288
      2. 执行命令: echo fs.file-max=524288 >> /etc/sysctl.conf
      3. 执行命令: sysctl -p 
      4. 执行命令: echo  * soft nofile  524286 >> /etc/security/limits.conf
      5. 执行命令: echo  * hard nofile 524287 >> /etc/security/limits.conf
      5. 结束当前会话期
      6. 启动新的会话
      7.启动我们的服务
     

  • 相关阅读:
    终于干掉了默认的输入法, 关于ctfmon.exe文件
    新工作一周的一些记录
    派送Maxthon 2.0 社区预览版本邀请.
    终于决定要跳槽了.
    当QA推出免责条款, 你会怎么看?
    Post by Word 2007, Test. 用word2007来发表一篇随笔.
    一个好的点菜系统
    再见2006
    昨天的实况以及忽悠姐妹花
    在公司我最近都只喝矿泉水
  • 原文地址:https://www.cnblogs.com/TonyXiaoClub/p/4747736.html
Copyright © 2020-2023  润新知