`
shootyou
  • 浏览: 84164 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

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

 
阅读更多

 

转载注明出处,谢谢~

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

 

分享到:
评论

相关推荐

    Too many open files 问题的解决.txt

    当一个应用(如Apache、MySQL、Java应用服务器等)试图打开超过其最大文件句柄数限制的文件时,就会遇到“Too many open files”的错误。这不仅会阻止进一步的文件操作,还可能引起应用崩溃或服务不可用的情况。 ##...

    AIX关于Weblogic的报错_Too_many_open_files_的处理

    通过上述步骤,我们可以有效地解决AIX环境下Weblogic遇到的“Too many open files”问题。这不仅涉及了系统层面的资源限制调整,还包括了应用级别的优化措施。在实际操作过程中,还需要根据具体情况灵活调整,确保...

    Python错误提示:[Errno 24] Too many open files的分析与解决

    在Python编程过程中,可能会遇到一个常见的错误提示:“[Errno 24] Too many open files”。这个错误通常意味着你的程序尝试打开的文件句柄超过了操作系统允许的最大限制。下面我们将深入探讨这个问题的原因、如何...

    39 案例实战:如何解决经典的Too many connections故障?背后原理是什么.pdf

    除了文件句柄限制之外,ulimit命令还可以限制其他资源的使用,例如coreFileSize(进程崩溃转储文件大小)、maxLockedMemory(最大锁定内存大小)、openFiles(最大打开文件句柄数)以及maxUserProcesses(最大用户...

    linux系统级别的能够打开的文件句柄的数file-max命令.docx

    当系统中的文件句柄数量达到这个值时,系统将不能再打开新的文件句柄,从而导致“Too many open files in system”错误。 file-max 命令的作用域是系统级别的,而不是进程级别的。它控制着 Linux 内核可以分配的...

    易语言根据文件句柄取文件路径

    在IT行业中,尤其是在编程领域,文件句柄是一个重要的概念,它是操作系统用来标识和管理打开文件的一种方式。在易语言中,处理文件句柄的操作能够帮助开发者更高效地进行文件操作。"易语言根据文件句柄取文件路径"是...

    tomcat文件上传下载、删除

    为了解决这些问题,你可以尝试先关闭文件句柄,或者以管理员权限运行Tomcat。 ```java File file = new File(filePath); if (file.delete()) { System.out.println("文件删除成功"); } else { System.out.println...

    易语言根据文件句柄取文件路径源码

    总的来说,掌握在易语言中根据文件句柄获取文件路径的方法是进行文件操作的基础,通过不断学习和实践,你可以更熟练地运用易语言来解决实际的编程问题。同时,利用社区资源,如源码分享站,可以加速学习进程,提高...

    Linux下查看进程打开的文件句柄数和如何修改方法

    如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看: 1.lsof -n |awk ‘{print $2}’|sort|...

    38 案例实战:数据库无法连接故障的定位,Too many connections.pdf

    数据库无法连接故障的定位,Too many connections(连接过多)是数据库管理员经常面临的问题。当业务系统尝试连接数据库时,如果数据库的连接数已经达到上限,那么新的连接请求就无法建立,这时就会抛出“Too many ...

    从打开的文件句柄获得文件的路径.根据HANDLE获得文件路径

    从打开的文件句柄获得文件的路径.根据HANDLE获得文件路径

    ZwQuerySystemInformation查找进程文件句柄

    `ZwQuerySystemInformation`结合`SystemProcessInformation`可以揭示进程所持有的所有文件句柄,这对于排查问题、审计文件访问行为或者实现高级监控工具至关重要。 在实现这一功能时,开发者通常需要以下步骤: 1. ...

    易语言文件号和文件句柄互转模块

    通过学习和使用这个模块,开发者可以提高其在易语言环境下的文件操作能力。 总的来说,文件号和文件句柄是操作系统管理文件的关键元素,而易语言提供了工具和方法来处理这两种标识符的转换。理解这些概念以及如何在...

    在页面路由中实现文件句柄传递,可以完成在另一个页面实现文件内容添加

    在vue开发时需要在页面跳转的时候传递文件句柄,又不想用vuex来传递,因为vuex使用有些大材小用,说以用mitt,也就是vue2的eventbus。vue3没有eventbus,所以使用mitt,来传递文件句柄,在另一个页面就可以拿到文件...

    这个东西可以查看文件句柄

    标题中的“这个东西可以查看文件句柄”表明我们要讨论的是一个工具或软件,它具有查看系统中打开文件的句柄信息的功能。句柄在计算机科学中是一个标识符,操作系统通过句柄来管理和操作文件或其他系统资源。这个工具...

    文件句柄冲同检测器(unlock wizard)

    《文件句柄冲突检测器——Unlock Wizard深度解析》 在日常的计算机操作中,我们时常会遇到这样的问题:想要删除或移动一个文件时,系统提示该文件正在被其他程序使用,无法进行操作。这时,Unlock Wizard这样的工具...

    列出打开了某个文件句柄handle的进程,找出谁在使用某个文件.zip

    在Windows操作系统中,"句柄"(handle)...总结来说,这个主题的核心是通过句柄来追踪文件使用情况,这在系统调试、性能优化或者问题排查中非常有用。理解并掌握这一技术能帮助IT专业人员更好地理解和控制他们的系统。

    易语言源码易语言文件号和文件句柄互转模块源码.rar

    易语言源码易语言文件号和文件句柄互转模块源码.rar 易语言源码易语言文件号和文件句柄互转模块源码.rar 易语言源码易语言文件号和文件句柄互转模块源码.rar 易语言源码易语言文件号和文件句柄互转模块源码.rar ...

    toomanyopenfiles的原理和解决方案.docx

    "Too many open files" 是一个在Linux系统中常见的错误,主要出现在系统无法处理当前进程中打开的文件句柄数量超过系统设定限制时。该错误通常发生在云服务器上,尤其是在运行复杂应用或服务时。理解这个错误的原理...

    查看哪个进程打开了哪些文件(显示进程打开的文件句柄handle

    "查看哪个进程打开了哪些文件句柄handle"是一个常见的系统管理和故障排查需求,尤其对于开发者和系统管理员来说,理解并掌握这一技能至关重要。 首先,我们需要了解什么是句柄。在Windows API中,句柄是一个非零...

Global site tag (gtag.js) - Google Analytics