1

数時間正常に動作した後にエラーが発生するJavaプログラムがあります...これらのプログラムは、Windows Server 2003を搭載した以前のサーバーで正常に動作していましたが、より高い構成でWindows Server 2008にアップグレードし、新しくインストールしましたSQL Server .欠落しているデータベース設定はありますか、または欠落しているOS設定はありますか??

私が受け取る例外は次のとおりです。

エラー::

org.apache.commons.dbcp.SQLNestedException: PoolableConnectionFactory を作成できません。原因: ネットワーク エラー

IOException: 利用可能なバッファ領域がありません (最大接続数に達しましたか?): 接続

4

3 に答える 3

1

Windows で同様の問題が発生したため、レジストリを変更する必要がありました。これは、OS によるクリーンアップよりも速い速度でソケットが開閉されていたという事実に関連していました。

特定のレジストリ設定を思い出せませんが、ユーザー アプリケーションで使用できるソケット接続の数が増えます。

私の記憶が正しければ、OS のデフォルトは 5000 接続です。

于 2011-01-13T16:38:18.900 に答える
0

c3p0 などの別の DB 接続プーリング パッケージを使用します。また、JDBC ドライバーとの互換性を確認してください。

于 2010-10-11T07:17:44.053 に答える
0

数時間正常に動作した後にエラーが発生するJavaプログラムがあります...

IOException: 利用可能なバッファ領域がありません (最大接続数に達しましたか?)

JDBC コードは、接続が取得されたfinallyブロック内の接続を適切に閉じていない可能性があります。tryこのようにして、DB が強制的にタイムアウトして接続を閉じるまで、接続は開いたままになります。タイムアウトは、使用される DB 構成によって異なります。どうやら、タイムアウトは以前のマシンでは比較的短く、新しいマシンでは比較的長かったようです。アプリケーションがそれらを閉じないためにDBが利用可能な接続を使い果たすと、そのような例外が発生します。

次のコード例は、リソース処理のための通常の (基本的な) JDBC イディオムを示しています (コード フローとコード コメントに注意してください)。

public List<Entity> list() throws SQLException {
    // Declare resources.
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    List<Entity> entities = new ArrayList<Entity>();

    try {
        // Acquire resources.
        connection = database.getConnection();
        statement = connection.prepareStatement("SELECT id, name, value FROM entity");
        resultSet = statement.executeQuery();

        // Gather data.
        while (resultSet.next()) {
            Entity entity = new Entity(); 
            entity.setId(resultSet.getLong("id"));
            entity.setName(resultSet.getString("name"));
            entity.setValue(resultSet.getInteger("value"));
            entities.add(entity);
        }
    } finally {
        // Close resources in reversed order.
        if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {}
        if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
        if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
    }

    // Return data.
    return entities;
}
于 2010-10-11T11:40:43.330 に答える