2017-03-09 11 views
0

現在、アプリケーションを再デプロイするたびに、hibernateによって開始されるTimer-0というブロッキングスレッドのために古いwebclassloaderが保持されます。 YourKitでヒープダンプを解析しようとしましたが、いくつかのthousendクラスがまだロードされていて、クラスローダーをブロックしているものがわかりにくいです。TomcatのGrailsアプリケーションのクリーンアンデプロイ

これは、いくつかの質問を私に残します:

  • クラスローダをアンロードすることはできません理由を見つけるためにどのように?

  • コンテナを再起動せずにすべてが完全にアンロードされることを確認するベストプラクティスはありますか?

ありがとうございます!

UPDATE

サンプルデータソース:

dataSource { 
    pooled = true 
    driverClassName = "org.postgresql.Driver" 
    dialect = "org.hibernate.dialect.PostgreSQLDialect" 
    username = "xx" 
    password = "xx" 
    configClass = DdlFilterConfiguration 
    properties { 
     maxActive = 250 
     maxIdle = 25 
     minIdle = 1 
     initialSize = 10 
     maxWait = 10000 
     validationQuery = "select 1 " 
     validationQueryTimeout = 3 
     validationInterval = 15000 
     testOnReturn = true 
     testWhileIdle = true 
     testOnBorrow = true 

     minEvictableIdleTimeMillis = 60000 
     timeBetweenEvictionRunsMillis = 5000 
    } 
} 
+0

Nopeコンテナを再起動します。 :/ –

+0

私は、Tomcat 7とGrailsを使ってパラレルデプロイメントを成功させました。ダウンタイムのない再導入のようなものです。 – Joe

+0

DB接続プールはどうやっていますか? – Joe

答えて

0

おそらく最善のアプローチは、フロントエンドにプロキシ(Apacheのプロキシがうまく機能)を備えたシステムです。同じマシン上でも2つのTomcatインスタンスを持つことができますが、異なるポートでは7001と8001と言うことができます。現在、ポート7001で実行していて、8001で新しい展開を開始してからプロキシを8001に再配置します。

関連する問題