回答一
文件系统允许打开的最大文件句柄数
[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连接也被看作一个文件
来源:oschina
链接:https://my.oschina.net/u/103999/blog/41187