文件数可以从三个维度限制:分别为操作系统限制,shell限制,以及进程限制.

查看进程占用的句柄数

查看当前shell下的文件句柄数限制:

ulimit -a

查看系统各个进程打开个文件句柄数:

lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more

单独获取某一程序文件数限制(9928为进程id)

cat /proc/9928/limits

shell级限制

通过ulimit -n修改,如执行命令ulimit -n 1000,则表示将当前shell的当前用户所有进程能打开的最大文件数量设置为1000.

Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:

ulimit -HSn 4096 

以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。

硬限制是实际的限制,而软限制,是warnning限制,只会做出warning

默认显示的是软限制,如果修改的时候没有加上的话,就是两个一起改

对于非root用户, /etc/security/limits.conf会限制ulimit -n,但是限制不了root用户

对于非root用户,ulimit -n只能越设置越小,root用户则无限制

之前启动过的程序要重新启动才能使用新的值。

ulimit是作为一种“临时限制”来存在的。我来举个例子。假设我开了一个用户root登录shell A,设置ulimit -SHn 65535,这个用户启动了程序A(比如nginx),当用户退出shell A后A程序继续工作在65535个文件打开限制。这时候,当用户root登录到shell B,查看ulimit -n 还是1024个 查看(self是到当前程序 PID的软连接)

任何用户对ulimit -n的修改只在当前环境有效,退出后失效,重新登录新来后,ulimit -n由limits.conf决定

操作系统限制

用root用户修改/etc/security/limits.conf 配置,在文件末尾添加如下内容:

  user           soft    nofile  2048
  user           hard    nofile  65536

其中user为用户名,根据部署环境配置。注意"nofile"项有两个可能的限制措施。就是hard和soft。user可以用*来表示匹配除了root外的所有用户.

硬限制表明soft限制中所能设定的最大值。soft限制指的是当前系统生效的设置值。hard限制值可以被普通用户降低。但是不能增加。

soft限制不能设置的比hard限制更高。只有root用户才能够增加hard限制值。

/proc/sys/fs/file-max限制不了/etc/security/limits.conf

只有root用户才有权限修改/etc/security/limits.conf

转载:http://www.cnblogs.com/zhangboyu/p/7452738.html?utm_campaign=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.com