小编Ste*_*ker的帖子

使用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
查看次数

在不同的 Keycloak 实例之间同步用户

我在一家多公司集团工作。每家公司都有自己的网络、自己的 IT 管理员,因此也有自己的 Active-Directory。无法通过 VPN 连接不同的网络,例如公司的用户可以从他们的电子邮件域中识别,例如 jdoe@company-a.com 和 jdoe@company-b.com

我的目标是为整个公司集团开发一个全球应用程序。

我想使用 Keycloak 作为身份和访问管理。

问题在于,所有公司的每个用户(属于定义组的成员)都必须有权访问/登录/授权到集中式前端和分散式后端(自编程 API 代理/网关)。

下面是目前的情况图:

Draw.io 随意编辑

网络草稿

建议:

  1. 我会为 keycloak 实例使用共享数据库,但由于没有 VPN,因此无法完成
  2. keycloak 到 keycloak 用户联盟?
  3. 使用其他公司作为 idP 并编写切换到主密钥斗篷的脚本?

在此先感谢您的帮助 :)

ldap active-directory openid-connect kubernetes keycloak

7
推荐指数
1
解决办法
577
查看次数

并发日志记录到 sql DB - 线程不并行运行

我用 2.14.0 和 2.13.3 对此进行了测试,我将 JDBC Appender 与 DynamicThresholdFilter 结合使用,并尝试了普通的 Logger 和 AsyncLogger。

在 JDBC Appender 中,我还尝试了 PoolingDriver 和 ConnectionFactory 方法。

事实证明,由于 Log4j2,线程没有并行启动。

使用 AsyncLogger 甚至使情况变得更糟,因为输出表示 Appender 未启动,并且在 15.000 条预期日志中,数据库中只有 13.517 条。

为了重现这个问题,我做了一个 github repo 在这里看到:https : //github.com/stefanwendelmann/Log4j_JDBC_Test

线程

编辑

我用 h2db 替换了 mssql-jdbc,并且线程不会阻塞。JMC 自动分析说有JdbcDatabaseManager 的锁定实例。

我的 mssql-jdbc 的 PoolableConnectionFactory 中是否存在任何配置问题,或者 dbcp/jdbc 驱动程序池是否存在一般问题?

编辑 2

在 Apaches LOGJ2 Jira 上创建票证:https ://issues.apache.org/jira/browse/LOG4J2-3022

编辑 3

为 mssql 和 h2:file 添加了更长的飞行记录

https://github.com/stefanwendelmann/Log4j_JDBC_Test/blob/main/recording_local_docker_mssql_asynclogger_10000_runs.jfr

https://github.com/stefanwendelmann/Log4j_JDBC_Test/blob/main/recording_local_h2_file_asynclogger_10000_runs.jfr

java sql-server logging log4j2 dbcp

5
推荐指数
1
解决办法
245
查看次数

哪个Java方法称为我的构造函数?

我想知道哪个方法或哪个类称为构造函数MyClass.

public class MyClass
{
  private static int instCount = 0;

  public MyClass()
  {
    instCount++;
    System.out.println("MyClass Konstruktor wurde aufgerufen! [" + instCount + "]");
  }
}
Run Code Online (Sandbox Code Playgroud)

java methods constructor class call

0
推荐指数
1
解决办法
1497
查看次数