7

Tomcat 6 で Oracle の UCP ドライバー (Oracle Universal Connection Pool) を使用しています。Oracles Howtoのように構成されています。問題は、ドライバーが多くのスレッド (Thread-0 から 57、UCP-worker-thread-1 から 24) を開始することです。これらはサーバーのシャットダウン時に停止されません。Tomcat は次のようなエラー メッセージを大量に出力します。

Web アプリケーション [/xxx] は [Timer-17] という名前のスレッドを開始したようですが、停止できませんでした。これにより、メモリ リークが発生する可能性が非常に高くなります。

これに対処する方法はありますか?

4

1 に答える 1

3

私は同じ問題を抱えていましたが、次のコードを my に追加することでこれを修正できましたServletContextListener:

import oracle.ucp.admin.UniversalConnectionPoolManager;
import oracle.ucp.admin.UniversalConnectionPoolManagerImpl;

public class MyContextListener implements ServletContextListener {
    /* ... */

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        // Your shutdown sequence here
        /* ... */

        // Shutdown UCP if present, to avoid warnings about thread leaks
        UniversalConnectionPoolManager ucpManager = UniversalConnectionPoolManagerImpl.getUniversalConnectionPoolManager();
        if (ucpManager != null) {
            String[] poolNames = ucpManager.getConnectionPoolNames();
            if (poolNames != null) {
                for (String poolName : poolNames) {
                    ucpManager.destroyConnectionPool(poolName);
                }
            }
        }
    }

}
于 2013-08-28T13:03:57.353 に答える