20、文件描述符

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述...
    whit_py阅读 1,028评论 0 0
  • 一些概念: 1.为了便于统一管理,系统将所有的输入/输出设备都视为文件,按文件方式提供给用户使用,如目录的检索、权...
    yydounai阅读 1,072评论 0 4
  • 背景 最近调试一款网关设备,它部署在客户端和服务端之间。在工作时,它同时接收来自客户端的连接,同时又向服务端建立连...
    guotianqing阅读 6,723评论 0 4
  • 内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件...
    踩在浪花上00阅读 839评论 0 1
  • 故事背景 看在分布式架构的通信过程中,接触到了netty,又通过netty接触到了句柄和文件描述符,其实之前就有过...
    阳光丶不锈阅读 9,745评论 0 11

友情链接更多精彩内容