繁体   English   中英

应用程序请求者无法建立连接。 (打开的文件太多)

[英]The application requester cannot establish the connection. (Too many open files)

我开发在Websphere工作管理器中运行的应用程序。 工作管理器用于在webpshere应用程序erver中运行线程。

我的线程每隔5分钟尝试从与应用程序服务器计算机不同的主机的MySQL数据库中获取一些数据。

当MySql数据库的主机关闭时,工作管理器将始终尝试连接到MySQL数据库,并且我知道我的程序将始终出现异常连接失败。 这是例外:com.mysql.jdbc.CommunicationsException:

Communications link failure due to underlying exception

但是,随着时间的流逝,我的程序会出现如下异常:

java.sql.SQLException: The application requester cannot establish the connection. (Too many open files)

并且此异常使我的应用程序服务器崩溃:

[8/2/10 9:07:21:613 ICT] 00000d54 prefs         W   Could not lock User prefs. Unix error code 24.
[8/2/10 9:07:21:613 ICT] 00000d54 prefs         W   Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock.

我需要建议如何解决此问题并防止我的应用程序崩溃?

工作环境:

Operation System AIX
Application Server Webpshere 7.0

听起来您有文件描述符泄漏。

您代码的某些部分(或在计算机上运行的其他代码)正在创建越来越多的文件句柄(包括套接字),并且没有关闭它们。 根据您的描述,这听起来像是您的代码正在执行此操作。

我怀疑在创建套接字时,抛出异常时并不能完全关闭套接字。 如果不这样做,套接字将保持打开状态,随着时间的流逝,文件将用完。 使用后需要关闭的任何资源都应始终try-finally块中关闭,以确保无论通过该方法的路径如何,都将关闭该资源。

如果您不认为自己在泄漏文件,请使用主机上的lsof实用工具查看进程中哪些文件句柄处于打开状态,并检查您是否确实需要所有这些文件句柄。 我发现您不太可能出于正当理由超过系统的默认FD限制。

一般来说,当您连接到数据库时,您会有某种打开调用来打开连接,然后对连接进行一些处理,然后关闭连接。 如果您忘记关闭连接,则可能会很快耗尽资源,并收到与您看到的错误类似的错误消息。 但是,即使您确实记得关闭连接,在执行工作时也可能会遇到异常,这将导致执行流程绕过close调用。 因此,您始终希望将工作包装在try块中,并将close调用包装在finally块中。 那可能是你的问题吗?

我曾经遇到过类似的问题。 我通过增加用户在OS上的ulimit来解决此问题。 发生这种情况是因为在大多数操作系统中,打开文件的数量受到限制。

在linux上,您可以通过以下命令进行操作。 在这里,我将其设置为无限制。

ulimit -u unlimited

您还可以通过运行以下命令检查电流限制:

>ulimit -a       
      core file size (blocks)   1000000
      data seg size (kbytes)    unlimited
      file size (blocks)            unlimited
      max memory size (kbytes)  unlimited
      stack size (kbytes)           8192
      cpu time (seconds)            unlimited
      max user processes            unlimited  
      pipe size (512 bytes)         8
      open files                    1024
      virtual memory (kbytes)   2105343

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM