首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

tomcat环境下服务器文件句柄耗尽(Too Many Open Files)的有关问题排查

2012-06-30 
tomcat环境下服务器文件句柄耗尽(Too Many Open Files)的问题排查前段时间帮助公司解决了一次tomcat环境服

tomcat环境下服务器文件句柄耗尽(Too Many Open Files)的问题排查

前段时间帮助公司解决了一次tomcat环境服务器的异常,今天有时间过来总结一下。

?

问题的表现:

tomcat服务在重启之后,短时间内会承受大量访问,由于这个时候缓存还没建立,每次访问都将消耗一定资源(数据库连接或者文件IO),并发量在2000左右的时候tomcat服务开始抛出大量Too Many Open Files的异常,主要是文件IO一块的异常,数据库连接池配置恰当就不会抛异常。

?

问题分析:

这是一个典型的文件句柄耗尽的异常,在linux里头“一切皆文件”,所以虽然提示“文件”打开太多,其实也有可能是socket打开太多或者设备打开太多。

?

文件句柄是用来干嘛的?

?

?

"fs.file-max=65536"?>>?/etc/sysctl.conf??
  • sysctl?-p??
  • 查看系统总限制?命令:cat?/proc/sys/fs/file-max????
  • 查看整个系统目前使用的文件句柄数量命令:cat?/proc/sys/fs/file-nr???
  • 查看某个进程开了哪些句柄?:lsof?-p?pid????
  • 某个进程开了几个句柄?:lsof?-p?pid?|wc?-l????
  • 也可以看到某个目录?/文件被什么进程占用了,显示已打开该目录或文件的所有进程信息?:lsof?path/filename???

    ?

    ?

    具体这个值应该设置成多少?

    优先级(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.连接池设置的把握,建立连接超时时间,读取超时时间,连接数目,等待时间,等都需要配置到一个合适的值,否则发挥不出连接池的性能。

  • 热点排行