3

いくつかのスレッドとメモリ リークの問題があります...Tomcat7 のログで、grails アプリケーションに関する次の行を見つけました。

SEVERE: The web application [/myApp] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.
May 16, 2012 6:02:10 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/myApp] appears to have started a thread named [pool-63-thread-1] but has failed to stop it. This is very likely to create a memory leak.
May 16, 2012 6:02:10 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/myApp] appears to have started a thread named [pool-63-thread-2] but has failed to stop it. This is very likely to create a memory leak.
May 16, 2012 6:02:10 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/myApp] appears to have started a thread named [pool-63-thread-3] but has failed to stop it. This is very likely to create a memory leak.
May 16, 2012 6:02:10 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/myApp] appears to have started a thread named [pool-63-thread-4] but has failed to stop it. This is very likely to create a memory leak.
May 16, 2012 6:02:10 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/myApp] appears to have started a thread named [pool-63-thread-5] but has failed to stop it. This is very likely to create a memory leak.
May 16, 2012 6:02:10 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/myApp] appears to have started a thread named [pool-63-thread-6] but has failed to stop it. This is very likely to create a memory leak.
May 16, 2012 6:02:10 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/myApp] appears to have started a thread named [pool-63-thread-7] but has failed to stop it. This is very likely to create a memory leak.

などなど...問題は、これらすべてのスレッドが、ソースがなく、自分で変更できないサードパーティの JAR から開発されたアプリケーションの一部で作成されていると思うことです。

それを解決する方法、または少なくともうまくいかないことを理解する方法はありますか?

ありがとう

4

2 に答える 2

4

最初の行は、MySQL JDBC ドライバーのバグを示しています。5.1.6 で修正されたようです。 /コネクタ/j/

他の行は、開始された ThreadPool を示し、アプリケーションの停止時に停止されませんでした。これは、サードパーティの jar ファイルに問題がある場合、そのソース コードを変更することによってのみ修正できます。

可能であれば、サードパーティの jar を一時的に削除して、問題が解決するかどうかを確認してください。

于 2012-05-16T11:57:00.190 に答える
2

ThreadPool の問題について、私が使用した (そしてうまくいくように見える) 解決策は次のとおりです。

  • 私はServletContextListener
  • メソッドではcontextDestroyed、リフレクションを使用して、DataSource の close メソッドを呼び出します-私の場合、c3p0 と DBCP で動作するようです
  • com.mchange.v2.c3p0.DataSources.destroyc3p0 の場合、静的メソッド(dataSource)も呼び出す必要があると思います 。
于 2012-07-27T11:36:10.667 に答える