20、文件描述符
2021-06-30 本文已影响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