分类: LINUX
2015-02-09 13:28:57
原文地址:linux文件描述符 作者:chibiaowu
linux下最大文件描述符的限制有两个方面,一个是用户级的限制,另外一个则是系统级限制。
文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket。第一个打开的文件是0,第二个是1,依此类推。Unix 操作系统通常给每个进程能打开的文件数量强加一个限制。更甚的是,unix 通常有一个系统级的限制。
通常我们通过终端连接到linux系统后执行ulimit -n 命令可以看到本次登录的session其文件描述符的限制,如下:
[root@bak ~]# ulimit -n
1024
当然可以通过ulimit -SHn 65536 命令来修改该限制,但这个变更只对当前的session有效,当断开连接重新连接后更改就失效了。
如果想永久变更需要修改/etc/security/limits.conf 文件,如下:
vi /etc/security/limits.conf
* hard nofile 65536
* soft nofile 65536
保存退出后重新登录,其最大文件描述符已经被永久更改了。
这只是修改用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占用文件描述符的总数不能超过这个限制。
它是限制所有用户打开文件描述符的总和,可以通过修改内核参数来更改该限制:
sysctl -w fs.file-max=65536
使用sysctl命令更改也是临时的,如果想永久更改需要在/etc/sysctl.conf添加
fs.file-max=65536
保存退出后使用sysctl -p 命令使其生效。
与file-max参数相对应的还有file-nr,这个参数是只读的,可以查看当前文件描述符的使用情况。
下面是摘自kernel document中关于file-max和file-nr参数的说明
file-max的默认值大概是系统内存的10%(系统内存以kb计算),