linux系统中打开文件数

不重启修改

方式1:

ulimit -a
ulimit -n 4096 # 也就是限制用户的最大文件打开数为4096个

参数:

-a 显示目前资源限制的设定。 
-c <core文件上限>  设定core文件的最大值,单位为区块。 
-d <数据节区大小>  程序数据节区的最大值,单位为KB。 
-f <文件大小>  shell所能建立的最大文件,单位为区块。 
-H  设定资源的硬性限制,也就是管理员所设下的限制。 
-m <内存大小>  指定可使用内存的上限,单位为KB。 
-n <文件数目>  指定同一时间最多可开启的文件数。 
-p <缓冲区大小>  指定管道缓冲区的大小,单位512字节。 
-s <堆叠大小>  指定堆叠的上限,单位为KB。 
-S  设定资源的弹性限制。 
-t <CPU时间>  指定CPU使用时间的上限,单位为秒。 
-u <程序数目>  用户最多可开启的程序数目。 
-v <虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB。

方式2:

cat /proc/sys/fs/file-nr
cat /proc/sys/fs/file-max # 系统总限制,可以通过cat查看目前的值
echo 22158 > /proc/sys/fs/file-max # echo 立刻修改

/proc/sys/fs/file-nr与 file-max 相关,它有三个值:

已分配文件句柄的数目
已使用文件句柄的数目
文件句柄的最大数目
该文件是只读的,仅用于显示信息。

查看所有进程的文件打开数:

lsof |wc -l

查看某个进程打开的文件数

lsof -p pid |wc -l

硬限制是实际的限制,而软限制,是warnning限制,只会做出warning,其实ulimit命令本身就有分软硬设置,加-h就是硬,加-s就是软,默认显示的是软限制,如果修改的时候没有加上的话,就是两个一起改

重启生效

第一步,修改用户进程可打开文件数限制,修改/etc/security/limits.conf文件,在文件中添加如下行:

    root soft nofile 10240
    root hard nofile 10240

其中 root 指定了要修改哪个用户的打开文件数限制,可用’*'号表示修改所有用户的限制;soft或hard指定要修改软限制还是硬限制;10240则指定了想要修改的新的限制值,即最大打开文件数(请注意软限制值要小于或等于硬限制)。修改完后保存文件。

第二步,修改/etc/pam.d/login文件,在文件中添加如下行:

    session required /lib/security/pam_limits.so

这是告诉Linux在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。修改完后保存此文件。

第三步,查看Linux系统级的最大打开文件数限制,使用如下命令:

    $ cat /proc/sys/fs/file-max
    12158