0

簡単な説明

私が関与しているプロジェクトでは、Eclipse Luna を IDE として使用して GWT 2.7 で作成されました。サーバー コードには、Hikari で構成された接続プール (バックエンドは mariadb データベース) があります ( http://brettwooldridge.github.io/HikariCP/)。1つのことを除いて、これはすべて正常に機能します..

問題

データベース サーバー (ubuntu) が爆発するのを避けるために、次のようなシャットダウン フックを実装しました。

public void addShutdownHook() {
    Runtime.getRuntime().addShutdownHook(new Thread() {
        @Override
        public void run() {
            dataSource.shutdown();
        }
    });
}

理想的には、接続プールに保持されている接続のクリーニングを処理します。ただし、Eclipse で [Terminate] ボタンをクリックして SDM をシャットダウンするときに気付いたのは、dataSource.shutdown(); ということです。おそらくサーバーが正常にシャットダウンされていないため、呼び出されることはありません。

上記の結果として (mariadb との組み合わせで) Linux に関する十分な知識がなく、これが正しいかどうかを判断することはできませんが、私には最も論理的に思えます)、最終的にサーバーが非常に遅くなり、最終的にそのリソースが使い果たされます。したがって、サーバーは接続を維持し、リソースが利用できなくなり、サーバーが爆発するまで n 回スタックすると仮定します。

質問

SDM を使用してこれらのリソースを適切にクリーンアップするにはどうすればよいですか? それとも、開発中に接続プールを使用せず、承認/本番環境でのみ使用する必要がありますか?

ありがとうございます

4

1 に答える 1

2

いくつかのこと:

  • JVM ライフサイクルではなく、webapp ライフサイクルを使用する必要があります。ServletContextListenerシャットダウン フックではなくを使用します。

  • これは Eclipse の問題です。常にプロセスを強制終了し、シャットダウン フックをバイパスします。サーブレット コンテキスト リスナーを使用したら、プロセスを強制終了する前に webapp をリロードしてみてください。

そうは言っても、それがあなたの問題である場合、私は奇妙だと思います.プロセスを強制終了すると、すべての接続が閉じられ、サーバー上のリソースが解放されます(そうでない場合、私に尋ねると、それはサーバーのバグになります)

于 2015-02-17T22:17:41.433 に答える