zoukankan      html  css  js  c++  java
  • [转]linux对文件描述符的种种限制

    最近在研究linux服务器下TCP的最大连接数问题,因为系统为每个TCP连接都要创建一个socket句柄,而每个socket句柄同时也是一个文件句柄,所以就专门对linux下文件描述符的种种限制作了一些深入的研究:

    1,ulimit  -n 65556

    ulimit -n是用来查看用户单一进程可同时打开的最大文件数,默认情况下是1024,我们通过ulimit -n 65536,将最大文件数修改为65536,此修改只对当前会话有效。

    当然,ulimit还有其他的用法,比如ulimit -a就能够显示系统资源的各种限制,这里就不再继续讲解,有兴趣的童鞋可以继续深入挖掘下~

    2,/etc/security/limits.conf

    看其所在文件夹和文件名字我们也可以猜到,这个是为了linux的性能、安全而设计的一些限制,那么如果我们要修改最大可打开的文件句柄数,我们可以在limits.conf在增加如下代码:

    * soft nofile 65536

    * hard nofile 65536

    这里面会有几个概念,比如nofile参数、软限制与硬限制等等,大家也可以自己继续挖掘下。

    3,cat proc/sys/fs/file-max:

    内核参数:linux内核将分配的最大的文件句柄数,所有进程一共可以打开的文件数量。

    还有一个是:cat /proc/sys/fs/file-nr: 5728  0  61763

                         第一个参数:代表已分配的文件句柄
                         第二个参数:代表已使用的文件句柄
                        第三个参数:代表文件句柄的最大值

    为了继续寻找文件限制的相关证据,我又进行了深入的挖掘,在深入理解linux内核的第三版中有这样一些描述:

    The files_init() function, executed during kernel initialization, sets the max_files to one-tenth of the available RAM in kilobytes, bute the system administrator can tune this parameter by writing into the /proc/sys/fs/file-max file.

    上面这段即是:
    内存初始化期间,files_init()函数把max_files字段设置为可用RAM大小的1/10(kilobytes),不过,系统管理员可以通过写/proc/sys/fs/file-max文件来修改这个值。

    而能改到多大,就没有这个说法了。

    而在linux内核源代码:files_init()内则有:
     /*
      * One file with associated inode and dcache is very roughly 1K.
      * Per default don't use more than 10% of our memory for files.
      */

     n = (mempages * (PAGE_SIZE / 1024)) / 10;
     files_stat.max_files = n;
    通过上面的一段描述:我们知道,带inode和dcache的一个文件大概就是1K(bit),而我们接收到的建议是文件的使用不超过10%的内存使用量。

    总结:linux的最大可打开文件数是可修改的,但具体能修改到多大,这要看机器的内存情况了。按照这个说法,tcp的连接数限制条件中的文件打开数,我们就可以通过修改文件限制参数和扩展内存来增加。至于tcp连接数的其他限制条件,则要在之后继续研究了。

    引用文章:

    http://www.cnblogs.com/mydomain/archive/2013/05/27/3100835.html

    http://soft.chinabyte.com/os/285/12349285.shtml

    http://blog.sina.com.cn/s/blog_6f5b22060101362c.html
    ---------------------
    作者:乱码特轻松
    来源:CSDN
    原文:https://blog.csdn.net/fox_hacker/article/details/41148115
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    求素数(定义法,埃式法,欧拉法)
    打表法
    python学习日记(匿名函数)
    python学习日记(编码再回顾)
    python学习日记(文件操作练习题)
    python学习日记(迭代器、生成器)-乱七八糟
    python学习日记(生成器函数进阶)
    python学习日记(装饰器的补充)
    python学习日记(函数--装饰器)
    python学习日记(函数进阶)
  • 原文地址:https://www.cnblogs.com/tlmn2008/p/10748516.html
Copyright © 2011-2022 走看看