【问题标题】:Dump leak connections in WildFly在 WildFly 中转储泄漏连接
【发布时间】:2017-02-24 20:12:54
【问题描述】:

我试图在 WildFly 10.1 中转储由 MySQL 数据源管理的泄漏连接,但我无法找到泄漏文件或泄漏转储。

为什么没有生成leaks.txt 文件?还有,我应该去哪里找文件?

程序

我在standalone.bat文件中注册了泄漏连接池:

"JAVA_OPTS=%JAVA_OPTS% -Dironjacamar.mcp=org.jboss.jca.core.connectionmanager.pool.mcp.LeakDumperManagedConnectionPool -Dironjacamar.leaklog=leaks.txt"

我可以确认属性正在 WildFly 中设置,因为在日志中显示:

JAVA_OPTS: "-Dprogram.name=standalone.bat -Xms64M -Xmx512M -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Dironjacamar.mcp=org.jboss.jca.core.connectionmanager.pool.mcp.LeakDumperManagedConnectionPool -Dironjacamar.leaklog=leaks.txt"

之后,我在我的模拟应用程序中泄漏了一些连接以生成数据。然后我运行 CLI 命令刷新所有连接并获得肯定响应:

[standalone@localhost:9990 /] /subsystem=datasources/data-source=mysql-ds:flush-all-connection-in-pool
{"outcome" => "success"}

但我在任何地方都找不到leaks.txt 文件。

我使用this articleIronJacamar leak documentation 作为参考。

使用 ironjacamar.mcp 系统配置检漏仪池 值为

的属性

org.jboss.jca.core.connectionmanager.pool.mcp.LeakDumperManagedConnectionPool

此配置适用于 IronJacamar 使用的所有连接池。

系统属性 ironjacamar.leaklog 可用于泄漏 转储到与日志记录设置分开的特殊文件中。

一个例子

-Dironjacamar.mcp=org.jboss.jca.core.connectionmanager.pool.mcp.LeakDumperManagedConnectionPool -Dironjacamar.leaklog=leaks.txt

更新

在 JBoss 论坛中创建线程 969369,以便他们也可以提供帮助。

错误报告JBJCA-1360

【问题讨论】:

  • 您是否尝试过使用绝对路径来控制文件的创建位置?例如 `-Dironjacamar.leaklog=/path/to/leaks.txt',根据自己的环境和操作系统调整路径。
  • @Gimby 是的,也尝试了绝对路径“d:/leaks.txt”,但没有生成文件,日志中也没有错误。
  • 检查 Standalone.xml 文件中的 <flush-strategy>AllConnections</flush-strategy> 以验证您的刷新策略是否存在。
  • @Maverick 不,它不存在。应该吗?
  • 我们使用域模式,当我从管理控制台指定刷新策略时,wildfly 将其添加到我在 domain.xml 文件中的数据源配置中。无论您安装 Wildfly,都会在您的 Standalone.xml 文件中添加配置。

标签: java wildfly wildfly-10 connection-leaks ironjacamar


【解决方案1】:

在 JBoss 论坛中创建了线程 969369,以便他们也可以提供帮助。

解决方法

有另一种记录泄漏连接的方法,但我认为它不应该作为这个问题的最终答案。

解决方法是为 JCA 子系统启用 debugerror 模式为 true(似乎不需要重新启动服务器)。

/subsystem=jca/cached-connection-manager=cached-connection-manager:write-attribute(name=debug, value=true)
/subsystem=jca/cached-connection-manager=cached-connection-manager:write-attribute(name=error, value=true)

您可以检查日志,因为服务器会转储异常,指出堆栈跟踪可帮助您找到泄漏。它不是那么干净,但它帮助我们找到了代码中的问题所在。

【讨论】:

猜你喜欢
  • 2016-11-28
  • 2015-06-19
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
相关资源
最近更新 更多