【转】在Linux中打开了太多文件(Too many open files)的解决方法

回答一 node

文件系统容许打开的最大文件句柄数 nginx

[root@lxadmin nginx]# cat /proc/sys/fs/file-max
8192


每一个进程能打开的最大文件句柄数
[root@lxadmin nginx]# ulimit -n
1024



能够在启动某个进程前,使用[root@lxadmin nginx]# ulimit -n 8192调整一下
若是须要永久调整文件系统容许打开的文件句柄数, 在/etc/sysctl.conf末尾添加fs.file-max=xxx

回答二

Linux内核有时会报告“Too many open files”,原由是file-max默认值(如8096)过小。要解决这个问题,能够root身份执行下列命令

# echo "65536"  > /proc/sys/fs/file-max  # 适用于2.2和2.4版内核
# echo "131072" > /proc/sys/fs/inode-max # 仅适用于2.2版内核d

或将它们加入/etc/rcS.d/*下的init脚本。

回答三

办法是修改操做系统的打开文件数量限制,方法以下:

1.  在/etc/sysctl.conf末尾添加fs.file-max=xxx

2.  在/etc/security/limits.conf文件中设置每一个进程能最大打开的文件句柄数 : 

* - nofile 8192


* hard nofile 8192
* soft nofile 8192


上述设置了每一个用户每一个进程的默认打开文件数为8192。 注意"nofile"项有两个软限制(soft)和硬限制(hard)之分。 要使修改过的最大打开文件数生效,必须对这两种限制进行设定。 若是使用"-"字符设定, 则hard和soft设定会同时被设定。 硬限制代表soft限制中所能设定的最大值。 soft限制是当前系统生效的设置值。 hard限制值能够被普通用户下降。可是不能增长。 soft限制不能设置的比hard限制更高。 只有root用户才可以增长hard限制值。 当增长文件限制描述,能够简单的把当前值双倍。 例子以下, 若是你要提升默认值1024, 最好提升到2048, 若是还要继续增长, 就须要设置成4096。

另一种状况是在建立索引的时候,也有两种可能,一种是合并因子过小,致使建立文件数量超过操做系统限制,这时能够修改合并因子,也能够修改操做系统的打开文件数限制;另外一种是合并因子受虚拟机内存的限制,没法调整得更大,而须要索引的doc 数量又很是的大,这个时候就只能经过修改操做系统的打开文件数限制来解决了。

在此基础上,我还修改了配置文件/etc/sysctl.conf ,  对TCP sockets进行了一些优化,例如:
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 30
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800
# Turn off tcp_window_scaling
net.ipv4.tcp_window_scaling = 0
# Turn off the tcp_sack
net.ipv4.tcp_sack = 0
#Turn off tcp_timestamps
net.ipv4.tcp_timestamps = 0


 注:一个socket链接也被看做一个文件
相关文章
相关标签/搜索