Linux下出现Too many open files提示怎么处理?

报春晓鹿

报春晓鹿

2016-02-20 03:22

今天图老师小编给大家介绍下Linux下出现Too many open files提示怎么处理?,平时喜欢Linux下出现Too many open files提示怎么处理?的朋友赶紧收藏起来吧!记得点赞哦~

在进行Linux系统操作的时候,有时会跳出too many open files提示,即打开文件太多的问题,其可能是你在关闭程序的时候没有正常关闭,下面图老师小编就教你遇到too many open files提示该如何解决。

 Linux下出现Too many open files提示怎么处理?

回答一、

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/diannaorumen/)

8192

文件系统最大可打开文件数

[root@lxadmin nginx]# ulimit -n

1024

程序限制只能打开1024个文件

使用[root@lxadmin nginx]# ulimit -n 8192调整一下

或者永久调整打开文件数 可在启动文件/etc/rc.d/rc.local末尾添加(在/etc/sysctl.conf末尾添加fs.file-max=xxx无效)

ulimit -n 8192

回答二、

Linux内核有时会报告Too many open files,起因是file-max默认值(8096)太小。要解决这个问题,可以root身份执行下列命令(或将它们加入/etc/rcS.d/*下的init脚本。)

# echo 65536 》 /proc/sys/fs/file-max # 适用于2.2和2.4版内核

# echo 131072 》 /proc/sys/fs/inode-max # 仅适用于2.2版内核

回答三、

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

1. 按照最大打开文件数量的需求设置系统, 并且通过检查/proc/sys/fs/file-max文件来确认最大打开文件数已经被正确设置。

# cat /proc/sys/fs/file-max

如果设置值太小, 修改文件/etc/sysctl.conf的变量到合适的值。 这样会在每次重启之后生效。 如果设置值够大,跳过下步。

# echo 2048 》 /proc/sys/fs/file-max

编辑文件/etc/sysctl.conf,插入下行。

fs.file-max = 8192

2. 在/etc/security/limits.conf文件中设置最大打开文件数, 下面是一行提示:

#

添加如下这行。

* - nofile 8192

这行设置了每个用户的默认打开文件数为2048。 注意nofile项有两个可能的限制措施。就是项下的hard和soft。 要使修改过得最大打开文件数生效,必须对这两种限制进行设定。 如果使用-字符设定, 则hard和soft设定会同时被设定。

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

当增加文件限制描述,可以简单的把当前值双倍。 例子如下, 如果你要提高默认值1024, 最好提高到2048, 如果还要继续增加, 就需要设置成4096。

另外一种情况是在创建索引的时候,也有两种可能,一种是 合并因子太小,导致创建文件数量超过操作系统限制,这时可以修改合并因子,也可以修改操作系统的打开文件数限制;另外一种是合并因子受虚拟机内存的限制,无法调整到更大,而 需要索引的doc 数量又非常的大,这个时候就只能通过修改操作系统的打开文件数限制来解决了。

在此基础上,我还修改了以下一个配置文件

vi /etc/sysctl.conf

添加:

# 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

然后 service network restart,这些都和TCP sockets有关的优化。

另外需要在 /etc/rc.d/rc.local里添加已使得重启的时候生效。

echo 30》/proc/sys/net/ipv4/tcp_fin_timeout

echo 1800》/proc/sys/net/ipv4/tcp_keepalive_time

echo 0》/proc/sys/net/ipv4/tcp_window_scaling

echo 0》/proc/sys/net/ipv4/tcp_sack

echo 0》/proc/sys/net/ipv4/tcp_timestamps

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/diannaorumen/)

因为不是所有的程序都在root下跑的,所有linux有对hard 与soft open files 的区分,普通用户受hard的限制,无论ulimit -n $数值调到多高,都跑不到 /etc/security/limits.conf里nofile的值。

这样的优化后 lsof -p $java_pid|wc -l可以跑到4千以上都不会抛出too many open files。

上面就是too many open files提示的解决方法的介绍了,你可以通过更改系统设定值、关闭多余程序等来解决该问题,是不是很简单呢?赶紧试试吧。

展开更多 50%)
分享

猜你喜欢

Linux下出现Too many open files提示怎么处理?

电脑入门
Linux下出现Too many open files提示怎么处理?

Steam在Win10系统下出现崩溃怎样处理

电脑入门
Steam在Win10系统下出现崩溃怎样处理

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

mysql "too many connections" 错误 之 mysql解决方法

编程语言 网络编程
mysql "too many connections" 错误 之 mysql解决方法

Linux提示Unable to locate package该如何处理?

电脑入门
Linux提示Unable to locate package该如何处理?

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Linux下出现"X11 forwarding request failed on channel 0错误

电脑入门
Linux下出现"X11 forwarding request failed on channel 0错误

腋下出现这个竟是癌变征兆

生活常识 生活小常识
腋下出现这个竟是癌变征兆

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

无法解除被禁止的组策略对象编辑器

无法解除被禁止的组策略对象编辑器

忘记XP登录密码导致无法登录到系统

忘记XP登录密码导致无法登录到系统
下拉加载更多内容 ↓