Linux文件描述符介绍
一、概述
Linux系统中一切皆文件,无论是什么,只要是存在Linux系统中的,他都是一个文件。而进程的作用就是为了处理数据,文件是
保存数据最常见的方法。所以,一般进程都需要打开一些文件,来读取和写入一些数据。但是文件的名称非常复杂,虽然方便我们人
类查看,但是计算机很难识别这个名称,为了让计算机可以快速的识别文件,我们就引入一个非负整数来代替某个文件。这个非负整
数就是文件描述符。所以,总结说,文件描述符就是内核为了高效的管理被打开的文件,所创建的一个非负整数和文件名的索引关系。
这个非负整数范围:0-N,其中0,1,2是特殊文件的文件描述符。0是标准输入,1标准输出,2是错误输出,一般文件的描述符
都是从3开始的。
二、文件描述符限制
一般来说,我们可以创建非常多的文件描述符,直到系统内存被沾满为止,但是生产中是不允许这样的,因为系统内存还有其他的
作用。所以内核会做出想用的控制,避免占用内存空间,一般情况下,不超过系统内存的10%(从系统级别来看)。
限制的种类:
1、系统级别的限制:指系统上所有的进程打开的文件描述符的限制
2、用户级别的限制:指某一个用户下进程打开的文件描述符的限制
三、文件描述符的设置
系统级别:sysctl -a | grep fs.file-max,这个值是由内核自己维护的,最好不要修改他
临时设置:
ulimit -SHn value
永久设置:
即编辑/etc/security/limits.conf文件
格式:
domain type item value
domain:可以设置用户或者组
type:hard和soft两种,-代表两者都设置,soft不能超过hard的值
item:nofile代表最大打开文件数,nproc代表最大进程数