美文网首页
20、文件描述符

20、文件描述符

作者: 一个反派人物 | 来源:发表于2021-06-30 14:32 被阅读0次

    1 文件描述符概念

    Linux 系统中,把一切都看做是文件,当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符,文件描述符就是内核为了高效管理已被打开的文件所创建的索引,用来指向被打开的文件,所有执行I/O操作的系统调用都会通过文件描述符。

    • 每个文件描述符会与一个打开的文件相对应
    • 不同的文件描述符也可能指向同一个文件
    • 相同的文件可以被不同的进程打开,也可以在同一个进程被多次打开

    2 文件描述符表

    进程级文件描述符表 系统级文件描述符表
    (open file table)
    i-node表
    记录内容 1.文件描述符
    2.文件指针(open file handle)
    1.当前文件偏移量
    2.状态标识
    3.文件访问模式(读,写,读和写)
    4.对该文件i-node对象的引用
    5.文件类型(常规文件、套接字、FIFO...)
    6.访问权限
    7.一个指向该文件所持有的所有表的指针
    8.文件的各种属性
    9.与信号驱动相关的设置
    1.文件类型
    2.文件锁

    3 查看进程文件描述符限制

    cat /proc/pid号码/limits


    soft 指的是当前系统生效的设置值
    hard 指的是系统中所能设定的最大值

    ulimit -n

    4 修改进程文件描述符限制

    用户级限制
    (只对通过PAM登录的用户有效,对systemd的service资源不生效)
    系统级限制
    查看 ulimit -n 1.sysctl -a | grep -i file-max
    2.cat /proc/sys/fs/file-max
    修改
    (重启失效)
    ulimit -SHn 65535 1.sysctl -w fs.file-max=65535
    2.echo 65535>/proc/sys/fs/file-max
    修改
    (永久生效)
    修改配置文件:
    /etc/security/limits.conf
    最后一行加入:
    * soft nofile 65535
    * hard nofile 65535
    修改配置文件:
    /etc/sysctl.conf
    在任意位置加入:
    fs.file-max=65535
    执行(不执行则不生效):
    sysctl -p

    对于nginx,修改/etc/security/limits.conf就可以,同时需要在nginx配置文件中修改worker_rlimit_nofile

    相关文章

      网友评论

          本文标题:20、文件描述符

          本文链接:https://www.haomeiwen.com/subject/raxjultx.html