转载注明出处,谢谢~
http://blog.csdn.net/shootyou
前段时间帮助公司解决了一次tomcat环境服务器的异常,今天有时间过来总结一下。
问题的表现:
tomcat服务在重启之后,短时间内会承受大量访问,由于这个时候缓存还没建立,每次访问都将消耗一定资源(数据库连接或者文件IO),并发量在2000左右的时候tomcat服务开始抛出大量Too Many Open Files的异常,主要是文件IO一块的异常,数据库连接池配置恰当就不会抛异常。
问题分析:
这是一个典型的文件句柄耗尽的异常,在linux里头“一切皆文件”,所以虽然提示“文件”打开太多,其实也有可能是socket打开太多或者设备打开太多。
文件句柄是用来干嘛的?
简单看来程序通过句柄获得资源的引用,来进行资源的打开和关闭的操作。
为什么会出现文件句柄耗尽的情况?
主要是因为linux在文件句柄的数目上有两个级别的限制。一个是系统级别的总数限制,一个是针对用户的限制。默认情况下每个用户所能使用的句柄数是1024。一般情况下1024也够用了,但是在大容量的系统上,特别是会频繁使用网络通信和文件IO的系统上,1024很快就被耗光了。所以首先我们要调整这个值。修改方法如下:
具体这个值应该设置成多少?
优先级(Open File Descriptors):
soft limit < hard limit < kernel < 实现最大file descriptor数采用的数据结构所导致的限制
其实这个值倒是没有具体限制,但是分配的值如果太大反而会影响系统性能,所以要根据具体应用调配权衡。
问题的解决方案:
首先当然是修改linux句柄数限制到一个合适的值。
然后就是应用本身的一个调整。有这么几种情况:
1.数据库连接池的优化。必须要使用连接池,否则句柄没耗光数据库就崩了。。。
2.抓取资源的时候有可能会用到HttpClient,尽量也应该使用连接池来控制连接数。
关于HttpClient的连接池配置可以查看我另外一文:http://blog.csdn.net/shootyou/archive/2011/05/12/6415248.aspx
3.连接池设置的把握,建立连接超时时间,读取超时时间,连接数目,等待时间,等都需要配置到一个合适的值,否则发挥不出连接池的性能。
参考文:http://terrywang.net/archives/549
分享到:
相关推荐
易语言根据文件句柄取文件路径源码,根据文件句柄取文件路径,文件句柄取文件路径名,lopen,ZwQueryObject,WToM,lclose,QueryDosDevice,StrCmpNI
如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看: 1.lsof -n |awk ‘{print $2}’|sort|...
从打开的文件句柄获得文件的路径.根据HANDLE获得文件路径
易语言文件号和文件句柄互转模块源码,文件号和文件句柄互转模块,文件号转句柄,句柄转文件号,CopyMemory,ZwClose,ZwQueryInformationFile
在vue开发时需要在页面跳转的时候传递文件句柄,又不想用vuex来传递,因为vuex使用有些大材小用,说以用mitt,也就是vue2的eventbus。vue3没有eventbus,所以使用mitt,来传递文件句柄,在另一个页面就可以拿到文件...
易语言源码易语言文件号和文件句柄互转模块源码.rar 易语言源码易语言文件号和文件句柄互转模块源码.rar 易语言源码易语言文件号和文件句柄互转模块源码.rar 易语言源码易语言文件号和文件句柄互转模块源码.rar ...
文件句柄 文章目录文件句柄查看用户级别(nofile)单个进程级别(nr_open )系统级别(file-max)修改用户级别(nofile)单个进程级别(nr_open )系统...超过最大句柄限制,报错:java.io.IOException: Too many open
易语言根据文件句柄取文件路径源码。@易语言源码分享站。
先运行 fdtrans 建立监听, 然后 运行fdtranc fdtranc 连接fdtrans并得到 文件 fdtrans.cpp的句柄。然后 fdtranc 用这个句柄读文件的前 30个字节并显示出来。 参考文章见 apue2 Section 17.4. Passing File ...
ZwQuerySystemInformation查找文件句柄
M文件与句柄
可以查看文件句柄号,权限,创建时间、修改时间、文件属性、共享、进程名等。
列出打开了某个文件句柄的进程,找出谁在使用某个文件.zip
原创,可以用于检测某个文件被哪些进程打开,并关闭这些进程(简易版的Unlocker)。实现方式是搜索操作系统的进程句柄表,再打开所有进程的打开句柄表进行搜索。内附说明。
小工具集(都是可执行文件,在WIN下不用安装),包括 -- 轻量截图工具 -- 查找文件句柄工具 用法如下: 在运行中输入:regsvr32 {文件目录}\openedfilefinder.dll。回车 在文件夹上单击右键可以看到“List open ...
查看window文件句柄信息有用工具。协助开发人员查看句柄使用情况。
当前进程的所有的socket句柄、连接的端口如何看等这些恼人的问题,通过阅读"使用netstat命令进行网络问题排查的诀窍",就可以立马找到解决新问题的答案。 本文包含了10个典型的问题及netstat的实际使用方法、实际...
在服务端不存在或没开启时,clientsocket反复连接服务端会导致程序句柄数急速增加,最后系统资源耗尽出错,本demo较好的解决了这一问题.
查看句柄查看句柄查看句柄查看句柄查看句柄查看句柄