相关疑难解决方法(0)

使用Log4j2自定义Hibernate Appender发生内存泄漏

我们将应用程序从自己的小型日志记录组件移至Log4j2。在我们最大的安装中,该应用程序每天可运行约60.000个工作。

我们编写了自己的Appender,它使用Hibernate写入数据库(请参阅InnovaIntegrationsportalHibernateAppender)。

在运行约36小时后,JVM因内存不足异常/错误(OOME)而崩溃,分析hprof后,我发现有763.5MB的org.apache.logging.log4j.core.appender.AbstractManager类。

查看随附的分析屏幕截图(2019-04-12 13_20_45-eclips ...)

https://issues.apache.org/jira/browse/LOG4J2-2589

更深入地讲,我尝试在测试类中重构行为并分析其结果(请参见屏幕截图1)。

对我来说似乎是内存泄漏。

InnovaIntegrationsportalHibernateAppender

package de.itout.innova.log4j.innova_log4j_appender;

import de.itout.innova.ssp.entities.ssp.entities.*;
import de.itout.jpa.util.*;
import java.io.*;
import java.util.*;
import javax.persistence.*;
import org.apache.logging.log4j.core.*;
import org.apache.logging.log4j.core.appender.*;
import org.apache.logging.log4j.core.config.plugins.*;
import org.apache.logging.log4j.core.layout.*;

/**
 *
 * @author swendelmann
 */
@Plugin(name = "InnovaIntegrationsportalHibernateAppender", category = "Core", elementType = "appender")
public class InnovaIntegrationsportalHibernateAppender extends AbstractAppender
{

  private String schnittstelle;
  private String version;
  private String laufId;
  private EntityManager em;

  public InnovaIntegrationsportalHibernateAppender(String name, Filter filter, Layout<? extends Serializable> layout)
  {
    super(name, filter, layout);
  }

  public InnovaIntegrationsportalHibernateAppender(String name, …
Run Code Online (Sandbox Code Playgroud)

java memory-leaks log4j2

10
推荐指数
1
解决办法
252
查看次数

标签 统计

java ×1

log4j2 ×1

memory-leaks ×1