繁体   English   中英

Tomcat内存泄漏

[英]Tomcat memory Leak

我有一个简单的网络应用程序,使用:

1-Spring mvc4.1.1

2-休眠 4.3.10

3-servlet 3.1

4-Oracle 12c

5-Ojdbc6(它存在于 tomcat/lib 中,而不存在于 app/lib 中)

6-JPA 2.1

我的持久性 xml 是:

<?xml version="1.0" encoding="UTF-8"?>

<persistence-unit name="NewpersistenceUnit">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <mapping-file>com/springapp/mvc/DBManagement/EntityMapping.xml</mapping-file>
    <class>com.springapp.mvc.DBManagement.StateEntity</class>
    <properties>
        <property name="hibernate.connection.url" value="jdbc:oracle:thin:@//localhost:1521/orcl"/>
        <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
        <property name="hibernate.connection.username" value="system"/>
        <property name="hibernate.connection.password" value="1234546"/>
        <property name="hibernate.archive.autodetection" value="class"/>
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="true"/>
        <property name="hbm2ddl.auto" value="update"/>
        <property name="hibernate.connection.oracle.jdbc.V8Compatible" value="true"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
    </properties>
</persistence-unit>

插入方法是

    public void AddLocation()
{
    EntityManagerFactory emf= Persistence.createEntityManagerFactory("NewpersistenceUnit");
    EntityManager em= emf.createEntityManager();
    EntityTransaction et= em.getTransaction();

    LocationEntity location = new LocationEntity();

    location.setCityname("Newyork");

    et.begin();
    em.persist(location);
    et.commit();
    em.close();

}

当我在 tomcat8.0.26 中部署和取消部署并导致内存泄漏时请帮助我

根据我的经验,这在大多数情况下是由现有对 tomcats WebappClassLoader 的强引用引起的。 使用的库之一或您的应用程序具有对 WebappClassLoader 的强引用,可防止 WebappClassLoader 被垃圾收集。 可以按照以下步骤跟踪此类内存泄漏:

  • 使用您的应用程序启动 tomcat
  • 重新部署您的应用程序一次
  • 手动运行垃圾收集并创建堆转储(可以使用visualvm 完成)
  • 使用 Eclipse Memory Analyzer 或 JProfiler 等配置文件分析堆转储
  • 找到一个 WebappClassLoader 类型的实例,它有一个属性开始=假
  • 跟踪这些 WebappClassLoader 实例的 GC 根(不包括弱引用、软引用和幻像引用)
  • 现在您应该看到是什么导致 WebappClassLoader 保持活动状态并被阻止 GC

这里有更详细的解释: How to analysisleaky webapps

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM