zoukankan      html  css  js  c++  java
  • linux /proc/sys/fs/file-nr /proc/sys/fs/file-max /etc/security/limits.conf 三者的关联

    ulimit -n 对应 /etc/security/limits.conf 文件设置
    问题: Can’t open so many files 对于linux运维的同学们,相信都遇到过这个问题。
    在Linux下一切资源皆文件,普通文件是文件,磁盘打印机是文件,socket 当然也是文件。系统默认设置成1024,但是这个数字对于服务器特别是大并发的远远是不够的,所以,我们需要结合实际情况修改成一个更大更合理的值。
    修改方法

    临时解决方案: ulimit -SHn 65535

    永久解决方案,注意,切勿设置过大,造成服务器无法启动,小于 /proc/sys/fs/file-max
    vim /etc/security/limits.conf

    # 确认包含下面的内容:
    * soft nofile 65536
    * hard nofile 65536
    保存,然后重启
    注:65536 是我这边的设定值,读者也可以自行设置一个合适的值,* 代表针对所有用户

    另外还有一个,/proc/sys/fs/file-nr,可以看到整个系统目前使用的文件句柄数量

    ulimit -u
    比如我们在模拟大规模http并发测试的时候,客户端会报一个无法fork new proc异常,原因是受到了最大进程1024的限制
    解除 Linux 系统的最大进程数
    方法如下
    vim /etc/security/limits.d/90-nproc.conf

    # 添加如下的行
    * soft nproc 102400
    root soft nproc 102400

    ulimit中硬限制是实际的限制,而软限制,是warnning限制,只会做出warning,其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软。
    默认显示的是软限制,如果修改的时候没有加上的话,就是两个一起改
    配置文件最前面的一位是domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制
    但是ulimit其实就是对单一程序的限制,进程级别的
    那系统总限制呢
    其实是在这里,/proc/sys/fs/file-max
    通过 man 5 proc 找到file-max的解释: file-max指定了系统范围内所有进程可以打开的文件句柄的数量限制。kernel-level。
    可以通过cat查看目前的值,echo来立刻修改
    echo 10000 > /proc/sys/fs/file-max
    另外还有一个,/proc/sys/fs/file-nr
    只读,可以看到整个系统目前使用的文件句柄数量
    ps :
    [root@qike ~]# cat /proc/sys/fs/file-nr
    1024 0 101269
    其中分别表示
    已分配文件句柄的数目 / 分配了但没有使用的句柄数目 / 文件句柄的最大数目
    具体解释参考http://www.dewen.io/q/14740

    http://stackoverflow.com/questions/3991223/how-does-linux-file-descriptor-limits-work

    [root@qike ~]# cat /proc/sys/fs/file-max
    101269
    可以看到file-nr的最后一项 和file-max是一致的

    参考链接 https://gitsea.com/2013/05/23/linux-ulimit%E8%AF%A6%E8%A7%A3/

    http://blog.sina.com.cn/s/blog_605f5b4f01013lad.html

  • 相关阅读:
    面向对象的特征有哪些方面?
    构造器(constructor)是否可被重写(override)?
    swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
    Java的运算符
    staitc关键字
    final关键字
    java的基本知识技能(二)
    java的基本操作和基本知识技能
    java概述------
    java中有几种方法实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
  • 原文地址:https://www.cnblogs.com/dantes91/p/5007778.html
Copyright © 2011-2022 走看看