java - Hibernate映射导致内存泄漏

标签 java hibernate tomcat hibernate-mapping

我有一个在 tomcat 中运行的 java web 应用程序,通过 hibernate 与我的数据库通信。数据库上的字段 is_enabled 在数据库上映射为 TINYINT,但在 hbm.xml 中映射为 boolean 值:

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

我知道映射没有任何问题,因为我有另一列是 TINYINT(1) 并映射为 hbm.xml 中的 boolean 值。但是当我添加这个属性时,我的 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.

知道如何进行调试吗?

最佳答案

I know nothing is wrong with the mapping as I have another column which is a TINYINT(1) and mapped as a boolean in the hbm.xml.

仅凭 boolean 属性本身很难做出评论。或许查看整个 hbm.xml 可能会给出一个想法。此外,是否有代码在您的应用程序(或您的 servlet 或 bean 或您拥有的东西之一)的初始化时执行,正在查看此属性并对其执行某些操作?

极不可能仅此属性是罪魁祸首。内存泄漏(或者你认为是什么根本原因)可能已经存在,并且此属性的存在(以及 hibernate 中的任何代码......或在你的应用程序中)导致过去临界点。

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

Any idea how to go about debugging this?

对于此类问题,最好使用专业的($$$)分析工具,如 JProfiler。

但我也使用其他开源或免费工具来解决与内存相关的问题(由 Web 服务、 hibernate 或您拥有的东西引起。)有一些选择。

  1. Eclipse Memory Analyzer - 当我不得不找出代码与 hibernate 交互的一些问题的根源时,这个工具对我来说是天赐之物。

  2. VisualGCVisualVM - 这是两个截然不同但密切相关的工具,可以帮助您从根本上解决问题(或至少缩小问题的范围。)

像这样的事情需要多管齐下,您会发现自己使用多种工具来给这只猫剥皮。

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

关于java - Hibernate映射导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20615051/

相关文章:

java - 如何将多对多关联映射到映射到两个不同表的类?

eclipse - 使用 excel 数据源在 tomcat 中部署 birt 查看器

java - Tomcat 在幕后做了什么来为您提供 DataSource 的实现

java - 尝试运行 jar 文件时获取 "No X11 DISPLAY variable was set"

java - Spring Boot中如何划分开发环境和生产环境的Liquibase包结构?

Java导入外部jar文件

java - 为什么Java不允许在类外初始化变量或常量?

java - 在 Hibernate 中获取当前月份的条件

java - 配置Spring JPA连接MySQL

tomcat - Unsupported major.minor version 要更改哪一个?