簡體   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