第 4 章 监控事务


4.1. 为事务子系统配置日志记录

您可以独立于 JBoss EAP 中的其他日志设置控制与事务相关的日志信息量。您可以使用管理控制台或管理 CLI 配置日志设置。

使用管理控制台配置事务日志记录器

  1. 导航到 Logging 子系统配置。

    1. 在管理控制台中,单击 Configuration 选项卡。如果使用受管域,您必须选择适当的服务器配置文件。
    2. 选择 Subsystems Logging Configuration 并点 View
  2. 编辑 com.arjuna 属性。

    选择 Categories 选项卡。com.arjuna 条目已经存在。选择 com.arjuna,再单击 Edit。您可以更改日志级别,并选择是否使用父处理程序。

    • 日志级别:

      由于事务可能会产生大量日志输出,默认的日志记录级别被设置为 WARN,以便服务器日志不会被事务输出所困扰。如果您需要检查事务处理详细信息,请使用 TRACE 日志级别,以便显示事务 ID。

    • 使用父处理程序:

      父处理程序指示日志记录器是否应将输出发送到其父级日志记录器。默认行为为 true

  3. 单击 Save 以保存更改。

使用管理 CLI 配置交易日志记录器

使用以下命令,从管理 CLI 设置日志级别:对于单机服务器,请从命令中删除 /profile=default

/profile=default/subsystem=logging/logger=com.arjuna:write-attribute(name=level,value=VALUE)
Copy to Clipboard Toggle word wrap

4.1.1. 启用 TRACE 日志级别

TRACE 日志记录级别将数据添加到日志中,以便您可以诊断 JBoss EAP 中的 Jakarta Connectors 问题。以下流程演示了如何为 org.jboss.jca、org.jboss. as.connectorcom.arjuna 类启用 TRACE 级别日志记录。

先决条件

  • 您已安装 JBoss EAP。

流程

  1. 打开终端。
  2. 启动管理 CLI。
  3. 选择以下选项之一:

    • 在受管域中,使用以下命令为 org.jboss.jca、org.jboss. as.connectorcom.arjuna 类启用 TRACE 日志记录级别:

      /profile=<PROFILE NAME>/subsystem=logging/logger=org.jboss.jca:add(level=TRACE)
      /profile=<PROFILE NAME>/subsystem=logging/logger=org.jboss.as.connector:add(level=TRACE)
      /profile=<PROFILE NAME>/subsystem=logging/logger=com.arjuna:write-attribute(name=level,value=TRACE)
      Copy to Clipboard Toggle word wrap

      <PROFILE NAME> 替换为您的 JBoss EAP 配置文件: defaultfull 或 full -ha

    • 如果您将 JBoss EAP 作为单机服务器运行,请使用以下命令为 org.jboss.jca、org.jboss. as.connectorcom.arjuna 类启用 TRACE 日志级别:

      /subsystem=logging/logger=org.jboss.jca:add(level=TRACE)
      /subsystem=logging/logger=org.jboss.as.connector:add(level=TRACE)
      /subsystem=logging/logger=com.arjuna:write-attribute(name=level,value=TRACE)
      Copy to Clipboard Toggle word wrap

      另外,使用以下命令在 console-handler 类中启用 TRACE 日志记录级别:

      /subsystem=logging/console-handler=CONSOLE:write-attribute(name=level,value=TRACE)
      Copy to Clipboard Toggle word wrap

      代码片段添加到适当的配置文件中:

      <logger category="com.arjuna">
        <level name="TRACE"/>
      </logger>
      
      <logger category="org.jboss.jca">
        <level name="TRACE"/>
      </logger>
      <logger category="org.jboss.as.connector">
        <level name="TRACE"/>
      </logger>
      Copy to Clipboard Toggle word wrap

4.1.2. 启用 Transaction Bridge Logger

事务网桥是 XTS 顶部的一层,是交易管理器 Jakarta Transactions 或 JTS 组件顶部的一层。它与 JBoss EAP 服务器的其他部分交互。您可以启用与 Transaction Manager 交互的组件的详细日志记录,以详细解释系统操作。

事务网桥使用 logging 子系统。在运行 JBoss EAP 服务器时,日志是从 standalone-xts.xml 文件中的 logging 子系统配置配置的。事务网桥的日志记录可用于调试目的。

您可以使用以下管理 CLI 命令配置 org.jboss.jbossts.txbridge 日志记录器以启用事务网桥日志:

/subsystem=logging/logger=org.jboss.jbossts.txbridge:add(level=ALL)
Copy to Clipboard Toggle word wrap

这会在服务器配置文件中生成以下 XML:

<logger category="org.jboss.jbossts.txbridge">
  <level name="ALL" />
</logger>
Copy to Clipboard Toggle word wrap
注意

部署顺序问题可能会导致交易管理器组件在 记录 子系统(包括事务网桥)全面配置之前变为活动状态。在这种情况下,会在启动时应用默认的日志级别,从而导致缺少详细的调试消息。

您可以配置 com.arjuna 日志记录器,以启用详细日志记录:

/subsystem=logging/logger=com.arjuna:write-attribute(name=level,value=ALL)
Copy to Clipboard Toggle word wrap

这会在服务器配置文件中生成以下 XML:

<logger category="com.arjuna">
  <level name="ALL" />
</logger>
Copy to Clipboard Toggle word wrap

4.1.3. 事务日志消息

您可以通过对事务日志记录器使用 DEBUG 日志级别来跟踪事务状态,同时让日志文件保持可读性。如需详细调试,请使用 TRACE 日志级别。有关 配置事务日志记录器的信息,请参阅为事务子系统 配置日志记录器。

事务管理器(TM)当配置为登录 TRACE 日志级别时,可以生成大量日志信息。以下是一些最常查看的消息:此列表不全面,因此您可能会看到除这些消息以外的消息。

Expand
表 4.1. 事务状态更改

事务开始

当事务开始时,将执行 com.arjuna.ats.arjuna.coordinator.BasicAction 的方法,并在日志中显示消息 BasicAction::Begin()for action-id <transaction uid>

事务提交

当事务提交时,将执行类 com.arjuna.ats.arjuna.coordinator.BasicAction 的方法 Commit,并在日志中显示消息 BasicAction::Commit()for action-id <transaction uid>

transaction Rollback

当事务回滚时,将执行类 com.arjuna.ats.arjuna.coordinator.BasicAction 的方法 Rollback,并在日志中显示消息 BasicAction::Rollback()for action-id <transaction uid>

事务超时

当事务超时时,将执行 com.arjuna.ats.arjuna.coordinator.TransactionReaper 的方法 doCancellations,并显示在日志中以 Reaper Worker <thread id> 试图取消 <transaction uid>。然后您将看到与上方所示相同的线程回滚事务。

4.1.4. 解码交易日志文件

4.1.4.1. 查找交易的 XID/UID

javax.transaction.TransactionManager 接口提供了两种方法来定位事务标识符:

  • 您可以调用 toString 方法来打印关于事务的完整信息,包括标识符。
  • 或者,您可以将 javax.transaction.Transaction 实例转换为 com.arjuna.ats.jta.transaction.Transaction,然后调用 get_uid 方法(返回 ArjunaCore Uid 表示)或调用 getTxId 方法,它将返回 Xid 作为全局标识符,这不是分支限定符。

    com.arjuna.ats.jta.transaction.Transaction arjunaTM = (com.arjuna.ats.jta.transaction.Transaction)tx.getTransaction();
    System.out.println("Transaction UID" +arjunaTM.get_uid());
    Copy to Clipboard Toggle word wrap

4.1.4.2. 查找事务状态和资源

TransactionStatusConnectionManager

TransactionStatusConnectionManager 对象供恢复模块用于检索事务的状态。它通过维护 TransactionStatus Connector 对象表来类似于 TransactionStatus Manager 对象的代理,每个对象都连接到应用程序 过程中的 TransactionStatusManager 对象。

您可以使用 getTransactionStatus 方法获取事务状态,该方法采用事务 Uid,如果可用,事务类型作为参数。

  1. transactions Uid 参数中的 process Uid 字段用于在事务对象存储 中查找目标 TransactionStatusManagerItem host-port 对。
  2. host-port 对用于通过使用 TransactionStatus Connector 对象建立到目标 TransactionStatus Manager 对象的 TCP 连接。
  3. TransactionStatusConnector 将事务 Uid 和事务类型传递给 TransactionStatusManager,以检索事务的状态。

以下代码示例演示了如何检索 TransactionStatusConnectionManager 并检查事务状态:

// Transaction id
Uid tx = new Uid();
. . . .
TransactionStatusConnectionManager tscm = new TransactionStatusConnectionManager();

// Check if the transaction aborted
assertEquals(tscm.getTransactionStatus(tx), ActionStatus.ABORTED);
Copy to Clipboard Toggle word wrap
TransactionStatusManager

TransactionStatusManager 对象充当恢复管理器的界面,从正在运行的应用进程获取事务状态。每个应用进程有一个 TransactionStatusManager 管理器,它由 com.arjuna.ats.arjuna.coordinator.TxControl 类创建。TCP 连接用于恢复管理器和 TransactionStatusManager 之间的通信。默认情况下,任何空闲端口都由 TransactionStatusManager 使用。但是,可以使用以下属性修复使用的端口:

$ EAP_HOME/bin/standalone.sh -DRecoveryEnvironmentBean.transactionStatusManagerPort=NETWORK_PORT_NUMBER
Copy to Clipboard Toggle word wrap
  1. 创建时,TransactionStatusManager 会作为 TransactionStatusManagerItem 获取与对象存储中的主机一起存储的端口。
  2. 启动 Listener 线程,它将等待来自 TransactionStatusConnector 的连接请求。
  3. 建立连接时,将创建一个运行 AtomicActionStatusService 服务 的连接 线程。此服务接受来自 TransactionStatusConnector 对象的事务 Uid 和事务类型(如果可用)。
  4. 事务状态从本地事务表中获取,并返回到 TransactionStatusConnector 对象。

4.1.4.3. 查看事务历史记录

默认情况下,事务服务不会维护任何关于事务的历史记录。但是,您可以将事务服务的 reconcileEnvironmentBean.enableStatistics 属性变量设置为 true,以保持有关所创建交易数量及其相应结果的信息。

您可以使用以下管理 CLI 命令启用统计信息:

/subsystem=transactions:write-attribute(name=enable-statistics,value=true)
Copy to Clipboard Toggle word wrap

您可以使用 com.arjuna.ats.arjuna.coordinator.TxStats 类,以编程方式获取更详细的事务统计信息。

示例: TxStats

public class TxStats
{
    /**
     * @return the number of transactions (top-level and nested) created so far.
     */

    public static int numberOfTransactions();

    /**
     * @return the number of nested (sub) transactions created so far.
     *

     public static int numberOfNestedTransactions();

     /**
     * @return the number of transactions which have terminated with heuristic
     *         outcomes.
     */

    public static int numberOfHeuristics();
    /**
     * @return the number of committed transactions.
     */

    public static int numberOfCommittedTransactions();

    /**
     * @return the total number of transactions which have rolled back.
     */

    public static int numberOfAbortedTransactions();

    /**
     * @return total number of inflight (active) transactions.
     */

    public static int numberOfInflightTransactions ();

    /**
     * @return total number of transactions rolled back due to timeout.
     */

    public static int numberOfTimedOutTransactions ();
    /**
     * @return the number of transactions rolled back by the application.
     */

    public static int numberOfApplicationRollbacks ();

    /**
     * @return number of transactions rolled back by participants.
     */

    public static int numberOfResourceRollbacks ();

    /**
     * Print the current information.
     */

    public static void printStatus(java.io.PrintWriter pw);
}
Copy to Clipboard Toggle word wrap

com.arjuna.ats.arjuna.coordinator.ActionManager 类使用 getNumberOfInflightTransactions 方法来提供有关当前活动事务列表的进一步信息。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部