代码之家  ›  专栏  ›  技术社区  ›  Adi Sembiring

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

  •  1
  • Adi Sembiring  · 技术社区  · 15 年前

    我在websphereworkmanager中开发应用程序。WorkManager用于在webpshere应用程序服务器中运行线程。

    每隔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
    
    3 回复  |  直到 15 年前
        1
  •  5
  •   Andrzej Doyle    15 年前

    听起来像是文件描述符泄漏了。

    你的

    总是 在一段时间内关闭 try-finally 块,以确保无论通过方法的路径如何,都将关闭资源。

    如果你不认为你在泄露文件,使用 lsof 应用工具,查看进程打开了哪些文件句柄,并检查是否确实需要所有这些文件句柄。我发现您不太可能有正当理由超过系统的默认FD限制。

        2
  •  2
  •   Greg Charles    15 年前

        3
  •  1
  •   YoK    15 年前

    我也遇到过类似的问题。我通过增加操作系统上用户的ulimit来修复它。 这是因为在大多数操作系统中打开的文件的数量是有限制的。

    在LinuxBox上,您可以通过以下命令来完成。在这里我把它设为无限。

    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