• linux文件描述符fd(windows下的句柄)


    在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件

    fd:file descriptor

    文件描述符0,1,2分别给了标准输入、标准输出和错误输出。

    ls -l /proc/pid/fd可以查看某个进程所使用的fd

    用lsof可以查看
    比如:lsof -i :22 的显示结果中有一列是FD,这个就是监听在22号端口的进程打开的文件描述符。比如FD这一列显示的是3。再使用lsof -d 3就可以查看到,文件描述符3所打开的文件。

    1.    系统最大打开文件描述符数:/proc/sys/fs/file-max

     设置

    a.    临时性

    # echo 1000000 > /proc/sys/fs/file-max

    b.    永久性:在/etc/sysctl.conf中设置

    fs.file-max = 1000000

    2.    进程最大打开文件描述符数:user limit中nofile的soft limit

    a.    查看

    $ ulimit -n

    1700000

    2. 设置

    a.    临时性:通过ulimit -Sn设置最大打开文件描述符数的soft limit,注意soft limit不能大于hard limit(ulimit -Hn可查看hard limit),另外ulimit -n默认查看的是soft limit,但是ulimit -n 1800000则是同时设置soft limit和hard limit。对于非root用户只能设置比原来小的hard limit。

    查看hard limit:

    $ ulimit -Hn

    1700000

    设置soft limit,必须小于hard limit:

    $ ulimit -Sn 1600000

    2.    永久性:上面的方法只是临时性的,注销重新登录就失效了,而且不能增大hard limit,只能在hard limit范围内修改soft limit。若要使修改永久有效,则需要在/etc/security/limits.conf中进行设置(需要root权限),可添加如下两行,表示用户chanon最大打开文件描述符数的soft limit为1800000,hard limit为2000000。以下设置需要注销之后重新登录才能生效:

    chanon           soft    nofile          1800000

    chanon           hard   nofile          2000000

    设置nofile的hard limit还有一点要注意的就是hard limit不能大于/proc/sys/fs/nr_open,假如hard limit大于nr_open,注销后无法正常登录。可以修改nr_open的值:

    # echo 2000000 > /proc/sys/fs/nr_open

    3.    查看当前系统使用的打开文件描述符数

    [root@localhost bin]# cat /proc/sys/fs/file-nr

    5664        0        186405

    其中第一个数表示当前系统已分配使用的打开文件描述符数,第二个数为分配后已释放的(目前已不再使用),第三个数等于file-max。

    4.    总结:

    a.    所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max

    b.    单个进程打开的文件描述符数不能超过user limit中nofile的soft limit

    c.    nofile的soft limit不能超过其hard limit

    d.    nofile的hard limit不能超过/proc/sys/fs/nr_open

    参考:

    http://blog.51cto.com/noican/1733706

    https://blog.csdn.net/cywosp/article/details/38965239

    https://www.kancloud.cn/kancloud/understanding-linux-processes/52176

    https://blog.csdn.net/dlutbrucezhang/article/details/9319577

    https://zhuanlan.zhihu.com/p/26609946

  • 相关阅读:
    CF-819B. Mister B and PR Shifts(模拟,找规律)
    CF-1198E. Rectangle Painting 2(最小点覆盖)
    CF-1214D. Treasure Island(dfs,最小割)
    CF-546E. Soldier and Traveling(网络最大流)
    洛谷 P1351 [NOIP2014 提高组] 联合权值(dp)
    CF-286C. Main Sequence(贪心,模拟)
    java基本框架
    人脸识别算法(—)
    将“引用”作为函数参数有哪些特点
    什么是“引用”?申明和使用“引用”要注意哪些问题?
  • 原文地址:https://www.cnblogs.com/shengulong/p/8778725.html
Copyright © 2020-2023  润新知