生存战争中的too.too many requests. open. files怎么解决

在Linux中打开了太多文件(Too many open files)的三种解决方法
作者:佚名
字体:[ ] 来源:互联网 时间:10-10 09:43:48
在运行linux系统时,打开的文件太多就会提示too many open files,出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值,下文介绍三种解决这个问题的办法,需要的朋友可以参考下
[root@lxadmin nginx]# cat /proc/sys/fs/file-max8192文件系统最大可打开文件数[root@lxadmin nginx]# ulimit -n1024程序限制只能打开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 connectionnet.ipv4.tcp_fin_timeout = 30# Decrease the time default value for tcp_keepalive_time connectionnet.ipv4.tcp_keepalive_time = 1800# Turn off tcp_window_scalingnet.ipv4.tcp_window_scaling = 0# Turn off the tcp_sacknet.ipv4.tcp_sack = 0#Turn off tcp_timestampsnet.ipv4.tcp_timestamps = 0然后 service network restart,这些都和TCP sockets有关的优化。
另外需要在 /etc/rc.d/rc.local里添加已使得重启的时候生效。echo &30&&/proc/sys/net/ipv4/tcp_fin_timeoutecho &1800&&/proc/sys/net/ipv4/tcp_keepalive_timeecho &0&&/proc/sys/net/ipv4/tcp_window_scalingecho &0&&/proc/sys/net/ipv4/tcp_sackecho &0&&/proc/sys/net/ipv4/tcp_timestamps因为不是所有的程序都在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。谢谢阅读,希望能帮到大家,请继续关注脚本之家,我们会努力分享更多优秀的文章。
大家感兴趣的内容
12345678910
最近更新的内容“Too many open files”错误与解决方法 | Linux |
_数据库_运维_开发_IT学习_无忧IT学习网
一起学习!一起进步!
“Too many open files”错误与解决方法
浏览: 263 views
一、问题现象
这是一个基于java的Web应用系统,在后台添加数据时提示无法添加,于是登录服务器查看tomcat日志,发现了如下异常信息:
java.io.IOException: Too many open files
通过这个错误,基...
一、问题现象
这是一个基于的Web应用系统,在后台添加数据时提示无法添加,于是登录查看日志,发现了如下异常信息:
.io.IOException: Too many open files
通过这个错误,基本判断是系统可用的文件描述符不够了,由于服务是系统www用户启动的,于是用www用户登录系统,通过&ulimit -n&命令查看系统可以打开最大文件描述符的数量,输出如下:
[www@server ~]$ ulimit &-n
可以看到这个设置的最大可打开的文件描述符已经是65535了,这么大的一个值应该够用了,但是为什么还是提示这么个错误呢?
二、解决思路
这个案例涉及到下ulimit命令的使用,这里简单介绍下ulimit的作用和使用技巧。ulimit主要是用来限制进程对资源的使用情况的,它支持各种类型的限制,常用的有:
&& &内核文件的大小限制
&& &进程数据块的大小限制
&& &Shell进程创建文件大小限制
&& &可加锁内存大小限制
&& &常驻内存集的大小限制
&& &打开文件句柄数限制
&& &分配堆栈的最大大小限制
&& &CPU占用时间限制用户最大可用的进程数限制
&& &Shell进程所能使用的最大虚拟内存限制
ulimit使用的基本格式为:
ulimit [options] [limit]
具体的options参数含义如下表所示:
选项&& &含义
-a&& &显示当前系统所有的limit资源信息。&
-H&& &设置硬资源限制,一旦设置不能增加。
-S&& &设置软资源限制,设置后可以增加,但是不能超过硬资源设置。
-c&& &最大的core文件的大小,以 blocks 为单位。
-f&& &进程可以创建文件的最大值,以blocks 为单位.
-d&& &进程最大的数据段的大小,以Kbytes 为单位。
-m&& &最大内存大小,以Kbytes为单位。
-n&& &可以打开的最大文件描述符的数量。
-s&& &线程栈大小,以Kbytes为单位。
-p&& &管道缓冲区的大小,以Kbytes 为单位。
-u&& &用户最大可用的进程数。
-v&& &进程最大可用的虚拟内存,以Kbytes 为单位。
-t&& &最大CPU占用时间,以秒为单位。
-l&& &最大可加锁内存大小,以Kbytes 为单位。
在使用ulimit时,有以下几种使用方法:
(1)在用户环境变量中加入
如果用户使用的是bash,那么就可以在用户目录的环境变量文件.bashrc或者.bash_profile中加入&ulimit -u 128&来限制用户最多可以使用128个进程。
(2)在应用程序的启动脚本中加入
如果应用程序是,那么就可以在的启动脚本startup.sh脚本中加入&ulimit -n 65535&来限制用户最多可以使用65535个文件描述符。
(3)直接在shell命令终端执行ulimit命令
这种方法的资源限制仅仅在执行命令的终端生效,退出或者关闭终端后,设置失效,并且这个设置不影响其它shell终端。
有时候为了方便起见,也可以将用户资源的限制统一由一个文件来配置,这个文件就是/etc/security/limits.conf,该文件不但能对指定用户的资源进行限制,还能对指定组的资源进行限制。该文件的使用规则如下:
&&domain& &type& &item& &value&&
&& &domain表示用户或者组的名字,还可以使用 * 作为通配符,表示任何用户或用户组。
&& &Type 表示限制的类型,可以有两个值,soft 和 hard,分别表示软、硬资源限制。
&& &item 表示需要限定的资源名称,常用的有nofile、cpu、stack等。分别表示最大打开句柄数、占用的cpu时间、最大的堆栈大小。
&& &value 表示限制各种资源的具体数值。
除了limits.conf文件之外,还有一个/etc/security/limits.d目录,可以将资源限制创建一个文件放到这个目录中,默认系统会首先去读取这个目录下的所有文件,然后才去读取limits.conf文件。所有资源限制设置完成后,退出shell终端,再次登录shell终端后,ulimit设置即可自动生效。
三、解决问题
在介绍了ulimit知识后,紧接着上面的案例,既然ulimit设置没问题,那么一定是设置没有生效导致的,接下来检查下启动的www用户环境变量下是否添加了ulimit限制,检查发现,www用户下并无ulimit资源限制,于是继续检查启动脚本startup.sh文件中,是否添加了ulimit限制,检查发现也并无添加,最后考虑是否将限制加到了limits.conf文件中,于是检查limits.conf文件,操作如下:
[root@server&~]
www&soft&nofile&65535
www&hard&nofile&65535
从输出可知,ulimit限制是加在了limits.conf文件中,既然限制已经加了,配置也没有错,为何还是报错呢,经过长时间思考,判断只有一种可能,那就是的启动时间早于ulimit资源限制的添加时间,于是首先查看下的启动时间,操作如下:
[root@server&~]
CentOS&release&6.3&(Final)
Kernel&\r&on&an&\m
[root@server&~]
&15:10:19&up&283&days,&&5:37,&&4&users,&&load&average:&1.20,&1.41,&1.35
[root@server&~]
[root@server&~]
4667&Sat&Jul&&6&09:33:39&:26:02
从输出看,这台已经有283天没有重启过了,而是在号9点多启动的,启动了近77天零五个半小时了,接着继续看看limits.conf文件的修改时间,操作如下图所示:
通过stat命令可以很清楚的看出,limits.conf文件最后的修改时间是,通过查问相关的管理人员,他们基本确认就是在这个时候添加的ulimit资源限制,这样此案例的问题就很明确了。由于ulimit限制的添加时间晚于最后一次的启动时间,而在此期间内,服务一直未重启过,操作系统也一直未重启过,那么ulimit资源限制对于来说始终是不生效的,同时,由于此操作系统是Centos6.3,系统默认的最大可用句柄数是1024,那么进程还是用的Linux默认的这个值,出现&Too many open files&的错误,也是合乎情理的。
& 问题清楚之后,解决问题的方法非常简单,重启服务即可。
标签: , , , ,
& | & & | & & | & & | & & | & & | & & | & & | & & | & & | & & | & & | & & | &
最热门文章
37096 views
9900 views
9111 views
5653 views
5108 views
4121 views
3796 views
3164 views
友情链接 |
本站进行134次查询打开文件数过多(too many open files)解决办法 - Linux/Unix当前位置:& &&&打开文件数过多(too many open files)解决办法打开文件数过多(too many open files)解决办法&&网友分享于:&&浏览:401次打开文件数过多(too many open files)我的操作系统是redhat,内核是Linux & version & 2.4.20,用tomcat作为中间件,出现了Too & many & open & files错误。
通过ulimit & -a查看结果为
open & files &
& (-n) & 1024
/proc/sys/fs/file-max值为209600
网上说和file-max的值有关,但是我的都已经209600了,应该不会有问题的,
和ulimit & -n看到的不一样,
请问ulimit & -a和file-max什么关系,怎么使ulimit & -a查看到的open & files信息是我想要设的值,怎么解决这个问题。
谢谢各位大虾 ------解决方案--------------------/proc/sys/fs/file-nr为当前已打开文件数,你可以参考一下。
/proc/sys/fs/file-max为系统总打开文件数限制,而ulimit -a看到的是单个进程限制,你应该设置这个值。
ulimit -n 4096可以将其设置为4096
不过要想系统重启后仍然有效,需要将此命令加入/etc/profile
------解决方案--------------------改一下/etc/security/limits.conf文件试一下,注意你要打开文件的用户
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有too many open files这种错误应该怎么解决_百度知道
too many open files这种错误应该怎么解决
&#47.limits.apache.apache.Thread.run(ThreadPool,大于了默认的设置.3(With Solr Client For Java),而应用2也对外服务不少的请求.apache.implAccept(Unknown Source);Too many open files tomcat 6.etc&#47:641)mon.PlainSocketImpl.java、类似于百度知道的一个应用应用服务器.etc&#47.PlainSocketImpl.jk、搜索服务器.net,一个对内管理索引(创建,内核2.acceptConnections(ChannelSocket.0G.ChannelSocket.java.SocketEinode-max 思考,发现两者之和已经接近1024!--[if : Exception executing acceptjava,比如,出现该错误说明该服务器承载了一定的并发连接.runIt(ChannelSocket.socketAccept(Native Method)at java,但并不是最好的方法.0.Java代码org.java,大量的如下信息、检索等)Web方案.jk;全站的所有与搜索有关的 接口调用都会向其发出请求:684)at java.jk,tomcat 故障处理.ServerSocket.implAccept(Unknown Source)at java。使用如下命令查看系统对允许打开最大文件描述符的配置.acceptConnections(ChannelSocket,File Operator).common,对于并发访问量大的网站.ChannelSocket acceptConnectionsWARNING,应用2响应超时.apache,或者有不正常的网络连接(Socket也是一种特殊的文件).d&#47.socketAccept(Native Method)etc&#47,把解决的方法记录下来!--[endif]--&gt.SocketException,牵连全站的搜索接口调用内容的输出.mon.8Web方案:与搜索服务器共享Apache2。服务器配置;事件的主题.0报“too many open files Too many open files 问题的解决linux 故障解决;sysctl.run(Unknown Source) org.net:&lt.lang:684)at java.net,一个对外提供服务.2.common.conf,如果描述符没有及时释放(不能完全依赖垃圾回收机制: Too many open filesproc&#47.java:修改&#47.SocketAcceptor.ipv4的优化):Solr1:852)at org.sys&#47.apache:linux系统出现Too many open files 错误,4G内存操作系统.ServerSocket:295)file-maxecho 65536 &gt:852)at org:295)at org,其中一个实例对外提供搜索.2,too many open files 故障处理这个问题是第一次在Linux环境下碰到.common.echo 65536 &gt,两个实例之间也使用socket进行通信(httpclient for java),查看Catalina日志.6;.accept(Unknown Source)at java.PlainSocketImpl.net.accept(Unknown Source)at org.accept(ChannelSocket.0报“too many open files Too many open files 问题的解决 linux 故障解决:# Increase system-wide file descriptor limit:Tomcat6.ChannelSocket acceptConnectionsWARNING,在文件末加上* soft nofile 65536* hard nofile 65536系统级文件描述符极限还可以通过将以下三行添加到 &#47,可能会出现too many open files的错误
使用lsof -p pid [httpd进程的 pid.accept(Unknown Source)at org,另一个实 例创建索引.apache、删除.net.net.accept(Unknown Source)at java.jk.Thread.jk,负责全站的搜索和提供内容相关性接口应用服务器,too many open files 故障处理发表于 2011 年 01 月 06 日 由 admin Tomcat Too Many Open Files ,tomcat 故障处理:641)at org,其中两个Tomcat实例.16+Apache2:&#47.util,要及时的close).jk.fs&#47,这是因为文件描述符大小不够.java.conf中对net.accept(ChannelSocket、文件IO没有关闭并释放出文件描述符(文件句柄.run(ThreadPool.18应用1、java的pid]来查看系统中apache进程和java运行时进程当前打开的文件资源!supportLineBreakNewLine]--&gt.ServerSocket.proc&#47:搜索服务停止.java.jk、Java Servlet(Web Service 接口)应用2.run(Unknown Source)&lt.common.fs&#47.jk,这样可以分别对两者进行优化(包括调整 Linux系统参数;rc:Php+Mysql问题症状:CentOS;security&#47: Exception executing acceptjava.local 启动脚本中来设置.rc:两个双核CPU 2.ThreadPool$ControlRunnable:虽 然调整该参数解决了当前的问题.threads.ChannelSocket:ulimit -u 查看open files设置ulimit -a 查看所有设置ulimit -u 65535(新的open files 值)修改设置ulimit -n 65536 设置用户可以同时打开的最大文件数(max open files) 如果本参数设置过小.8.ChannelSsys&#47.java,较好的办法是将搜索服务从该服务器中分离出来.ChannelSocket.PlainSocketImpl.SocketAcceptor.apache: Too many open filesat java,尤其是搜索服务.runIt(ChannelSocket.tomcat.ServerSocket.Too many open files tomcat 6.threads,创建索引的时候会占用大量的文件描述符。修改配置. &#47.javaTomcat Too Many Open Files
其他类似问题
为您推荐:
files的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁相关资讯 & & &
& (03/11/:15)
& (12/20/:55)
& (03/06/:24)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款}

我要回帖

更多关于 linux too many files 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信