2013-12-16 84 views
1

我有一个运行在tomcat中的java web应用程序,通过休眠与我的db通信。 is_enabled对数据库的字段映射作为一个数据库中的TINYINT,但在hbm.xml一个布尔值:休眠映射导致内存泄漏

<property name="isEnabled" type="boolean"> 
     <column name="is_enabled" /> 
</property> 

我知道没有什么是错的映射,因为我有另一列是一个TINYINT(1)映射为hbm.xml中的布尔值。但是,当我添加此属性我的WAR不加载和在Tomcat我得到几个:

org.apache.catalina.loader.WebappClassLoader clearReferencesThreads 
SEVERE: The web application [] appears to have started a thread name 
[Job_Executor2] but has failed to stop it. This is very likely to 
create a memory leak. 

任何想法如何去调试呢?

+0

我想我们在这里错过了一些上下文。 Job_Executor2做什么? –

+0

嗨,我**高度怀疑你所描述的可能会导致内存泄漏。 (或者更清楚的是一个线程泄漏)。 – Taylor

+0

@AdamArold有多个线程导致问题..不只是Job_Executor2。 – invictvs1

回答

1

我知道映射没什么问题,因为我有另一列 ,它是一个TINYINT(1)并映射为hbm.xml中的布尔值。

仅仅通过查看布尔属性本身就很难评论。也许看看整个hbm.xml可能会提供一个想法。另外,是否有代码在您的应用程序的init(或您的servlet或bean之一或您有什么)的init处执行,并且正在查看此属性并对其执行操作?

这个属性单独是罪魁祸首是极不可能的。机会是内存泄漏(或者你有什么作为根本原因)已经存在,并且该属性的存在(以及休眠中的任何代码...或应用中的)都会导致翻转点。

也就是说,罪魁祸首不是这个属性。它只是一个催化剂,使现有的软件或系统错误显现出来。

任何想法如何去调试呢?

对于这样的问题,最好使用像JProfiler这样的专业($$$)分析工具。

但我也使用其他开源或免费工具来解决内存相关的问题(由Web服务,休眠或你有什么)。有一些选项。

  1. Eclipse Memory Analyzer - 这个工具是一个天赐良机,我当我不得不根导致一些问题的代码与Hibernate交互。

  2. VisualGCVisualVM - 这是两个不同但密切相关的工具,可以帮你根源问题

这样的事情需要(或者至少窄其中可能存在的问题。)一个多管齐下的方法,你会发现自己使用几种工具来剥皮这只猫。

给出上面列出的这三种工具。希望他们帮助。