linux 修改最大文件描述符

简介:

linux下最大文件描述符的限制有两个方面,一个是用户级的限制,另外一个则是系统级限制。

先介绍如何修改系统级的限制

通常我们通过终端连接到linux系统后执行ulimit -n 命令可以看到本次登录的session其文件描述符的限制,如下:
$ulimit -n
1024

当然可以通过ulimit -SHn 102400 命令来修改该限制,但这个变更只对当前的session有效,当断开连接重新连接后更改就失效了。

如果想永久变更需要修改/etc/security/limits.conf 文件,如下:
vi /etc/security/limits.conf
* hard nofile 102400
* soft nofile 102400

保存退出后重新登录,其最大文件描述符已经被永久更改了。

这只是修改用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占用文件描述符的总数不能超过这个限制。

系统级的限制

它是限制所有用户打开文件描述符的总和,可以通过修改内核参数来更改该限制:
sysctl -w fs.file-max=102400

使用sysctl命令更改也是临时的,如果想永久更改需要在/etc/sysctl.conf添加
fs.file-max=102400
保存退出后使用sysctl -p 命令使其生效。

与file-max参数相对应的还有file-nr,这个参数是只读的,可以查看当前文件描述符的使用情况。

sysctl -a | grep file-nr

下面是摘自kernel document中关于file-max和file-nr参数的说明

file-max & file-nr:

The kernel allocates file handles dynamically, but as yet it doesn't free them again.
内核可以动态的分配文件句柄,但到目前为止是不会释放它们的

The value in file-max denotes the maximum number of file handles that the Linux kernel will allocate. When you get lots of error messages about running out of file handles, you might want to increase this limit.
file-max的值是linux内核可以分配的最大文件句柄数。如果你看到了很多关于打开文件数已经达到了最大值的错误信息,你可以试着增加该值的限制

Historically, the three values in file-nr denoted the number of allocated file handles, the number of allocated but unused file handles, and the maximum number of file handles. Linux 2.6 always reports 0 as the number of free file handles -- this is not an error, it just means that the number of allocated file handles exactly matches the number of used file handles.
在kernel 2.6之前的版本中,file-nr 中的值由三部分组成,分别为:1.已经分配的文件句柄数,2.已经分配单没有使用的文件句柄数,3.最大文件句柄数。但在kernel 2.6版本中第二项的值总为0,这并不是一个错误,它实际上意味着已经分配的文件句柄无一浪费的都已经被使用了

file-max的默认值大概是系统内存的10%(系统内存以kb计算),

参考文章:http://www.mjmwired.net/kernel/Documentation/sysctl/fs.txt




      本文转自hb_fukua  51CTO博客,原文链接:http://blog.51cto.com/2804976/835557,如需转载请自行联系原作者




相关文章
|
1月前
|
Unix Linux 索引
Linux 基础解惑:Linux 下文件描述符标志和文件描述符状态标志,文件状态标志,文件状态之间的区别
Linux 基础解惑:Linux 下文件描述符标志和文件描述符状态标志,文件状态标志,文件状态之间的区别
31 0
|
3月前
|
Unix Linux API
Linux文件描述符和文件指针互转
文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。FILE *指针变量标识符;其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心FILE结构的细节。
26 0
|
3月前
|
存储 Unix Linux
Linux文件描述符和打开文件之间的关系
文件描述符和打开的文件之间似乎呈现出一一对应的关系。然而,实际并非如此。多个文件描述符指向同一打开文件,这既有可能,也属必要。这些文件描述符可在相同或不同的进程中打开。要理解具体情况如何,需要查看由内核维护的 3 个数据结构。进程级的文件描述符表。系统级的打开文件表。文件系统的 i-node 表。上述讨论揭示出如下要点。两个不同的文件描述符,若指向同一打开文件句柄,将共享同一文件偏移量。
17 0
Linux文件描述符和打开文件之间的关系
|
4月前
|
Linux
linux文件描述符fd
linux文件描述符fd
24 0
|
8月前
|
监控 Linux
Linux显示文件描述符命令:fd
Linux显示文件描述符命令:fd
316 0
Linux显示文件描述符命令:fd
|
9月前
|
Java Linux PHP
【Linux】基础IO——文件操作|文件描述符|重定向|缓冲区
Linux下的文件操作、C语言下的文件操作、文件描述符、重定向的原理和缓冲区的理解。
|
9月前
|
安全 Linux
Linux 如何限制系统级、用户级和进程级文件描述符的数量
进程每打开一个文件(linux下一切皆文件,包括socket) ,都会消耗一定的内存资源。如果有不怀好心的人启动一个进程来无限的创建和打开新的文件,会让服务器崩溃。所以linux系统出于安全角度的考虑,在多个位置都限制了可打开的文件描述符的数量,包括系统级、用户级、进程级。这三个限制的含义和修改方式如下:
125 0
|
9月前
|
Linux 索引
对linux中的文件描述符的认识
linux中的文件描述符到底是什么?
49 0
|
10月前
|
Linux 开发工具 索引
Linux重定向文件描述符FD
我们知道在Linux系统中的一切都可以被视为文件,文件可以分为:普通文件、目录文件、链接文件和设备文件。在操作这些所谓的文件时,我们每次都会找到一个名字,这需要很多时间和效率。Linux规定每个文件对应一个索引,以便在操作文件时,我们可以直接找到索引进行操作。 文件描述符(file descriptor)为了有效地管理这些已经打开的文件创建的索引,它是一个非负整数(通常是小整数),用于指代打开的文件,所有执行I/O操作系统的呼叫是通过文件描述符实现的。同时,还规定,当系统刚刚启动时,0是标准输入,1是标准输出,2是标准错误。
72 0
|
10月前
|
存储 Linux 开发工具
【Linux】基础IO(一) :文件描述符,文件流指针,重定向(下)
【Linux】基础IO(一) :文件描述符,文件流指针,重定向(下)
119 0