第 4 章 监控事务
4.1. 为事务子系统配置日志记录 复制链接链接已复制到粘贴板!
您可以独立于 JBoss EAP 中的其他日志设置控制与事务相关的日志信息量。您可以使用管理控制台或管理 CLI 配置日志设置。
使用管理控制台配置事务日志记录器
导航到 Logging 子系统配置。
- 在管理控制台中,单击 Configuration 选项卡。如果使用受管域,您必须选择适当的服务器配置文件。
-
选择 Subsystems
Logging Configuration 并点 View。
编辑
com.arjuna属性。选择 Categories 选项卡。
com.arjuna条目已经存在。选择com.arjuna,再单击 Edit。您可以更改日志级别,并选择是否使用父处理程序。日志级别:
由于事务可能会产生大量日志输出,默认的日志记录级别被设置为
WARN,以便服务器日志不会被事务输出所困扰。如果您需要检查事务处理详细信息,请使用TRACE日志级别,以便显示事务 ID。使用父处理程序:
父处理程序指示日志记录器是否应将输出发送到其父级日志记录器。默认行为为
true。
- 单击 Save 以保存更改。
使用管理 CLI 配置交易日志记录器
使用以下命令,从管理 CLI 设置日志级别:对于单机服务器,请从命令中删除 /profile=default。
/profile=default/subsystem=logging/logger=com.arjuna:write-attribute(name=level,value=VALUE)
/profile=default/subsystem=logging/logger=com.arjuna:write-attribute(name=level,value=VALUE)
4.1.1. 启用 TRACE 日志级别 复制链接链接已复制到粘贴板!
TRACE 日志记录级别将数据添加到日志中,以便您可以诊断 JBoss EAP 中的 Jakarta Connectors 问题。以下流程演示了如何为 org.jboss.jca、org.jboss. as.connector 和 com.arjuna 类启用 TRACE 级别日志记录。
先决条件
- 您已安装 JBoss EAP。
流程
- 打开终端。
- 启动管理 CLI。
选择以下选项之一:
在受管域中,使用以下命令为
org.jboss.jca、org.jboss.as.connector和com.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)
/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 Copied! Toggle word wrap Toggle overflow 将
<PROFILE NAME>替换为您的 JBoss EAP 配置文件:default、full 或 full-ha。如果您将 JBoss EAP 作为单机服务器运行,请使用以下命令为
org.jboss.jca、org.jboss.as.connector和com.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)
/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 Copied! Toggle word wrap Toggle overflow 另外,使用以下命令在
console-handler类中启用TRACE日志记录级别:/subsystem=logging/console-handler=CONSOLE:write-attribute(name=level,value=TRACE)
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=level,value=TRACE)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 代码片段添加到适当的配置文件中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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)
/subsystem=logging/logger=org.jboss.jbossts.txbridge:add(level=ALL)
这会在服务器配置文件中生成以下 XML:
<logger category="org.jboss.jbossts.txbridge"> <level name="ALL" /> </logger>
<logger category="org.jboss.jbossts.txbridge">
<level name="ALL" />
</logger>
部署顺序问题可能会导致交易管理器组件在 记录 子系统(包括事务网桥)全面配置之前变为活动状态。在这种情况下,会在启动时应用默认的日志级别,从而导致缺少详细的调试消息。
您可以配置 com.arjuna 日志记录器,以启用详细日志记录:
/subsystem=logging/logger=com.arjuna:write-attribute(name=level,value=ALL)
/subsystem=logging/logger=com.arjuna:write-attribute(name=level,value=ALL)
这会在服务器配置文件中生成以下 XML:
<logger category="com.arjuna"> <level name="ALL" /> </logger>
<logger category="com.arjuna">
<level name="ALL" />
</logger>
4.1.3. 事务日志消息 复制链接链接已复制到粘贴板!
您可以通过对事务日志记录器使用 DEBUG 日志级别来跟踪事务状态,同时让日志文件保持可读性。如需详细调试,请使用 TRACE 日志级别。有关 配置事务日志记录器的信息,请参阅为事务子系统 配置日志记录器。
事务管理器(TM)当配置为登录 TRACE 日志级别时,可以生成大量日志信息。以下是一些最常查看的消息:此列表不全面,因此您可能会看到除这些消息以外的消息。
| 事务开始 |
当事务开始时,将执行 |
| 事务提交 |
当事务提交时,将执行类 |
| transaction Rollback |
当事务回滚时,将执行类 |
| 事务超时 |
当事务超时时,将执行 |
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());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 Copied! Toggle word wrap Toggle overflow
4.1.4.2. 查找事务状态和资源 复制链接链接已复制到粘贴板!
TransactionStatusConnectionManager
TransactionStatusConnectionManager 对象供恢复模块用于检索事务的状态。它通过维护 TransactionStatus 对象的代理,每个对象都连接到应用程序 Connector 对象表来类似于 TransactionStatus Manager过程中的 TransactionStatusManager 对象。
您可以使用 getTransactionStatus 方法获取事务状态,该方法采用事务 Uid,如果可用,事务类型作为参数。
-
transactions Uid 参数中的 process Uid 字段用于在事务对象存储
中查找目标 TransactionStatusManagerItemhost-port 对。 -
host-port 对用于通过使用 TransactionStatus
Connector 对象建立到目标对象的 TCP 连接。TransactionStatusManager -
TransactionStatusConnector将事务 Uid 和事务类型传递给TransactionStatusManager,以检索事务的状态。
以下代码示例演示了如何检索 TransactionStatusConnectionManager 并检查事务状态:
TransactionStatusManager
TransactionStatusManager 对象充当恢复管理器的界面,从正在运行的应用进程获取事务状态。每个应用进程有一个 TransactionStatusManager 管理器,它由 com.arjuna.ats.arjuna.coordinator.TxControl 类创建。TCP 连接用于恢复管理器和 TransactionStatusManager 之间的通信。默认情况下,任何空闲端口都由 TransactionStatusManager 使用。但是,可以使用以下属性修复使用的端口:
EAP_HOME/bin/standalone.sh -DRecoveryEnvironmentBean.transactionStatusManagerPort=NETWORK_PORT_NUMBER
$ EAP_HOME/bin/standalone.sh -DRecoveryEnvironmentBean.transactionStatusManagerPort=NETWORK_PORT_NUMBER
-
创建时,
TransactionStatusManager会作为TransactionStatusManagerItem获取与对象存储中的主机一起存储的端口。 -
启动
Listener线程,它将等待来自TransactionStatusConnector的连接请求。 -
建立连接时,将创建一个运行
AtomicActionStatusService服务的连接线程。此服务接受来自TransactionStatusConnector对象的事务 Uid 和事务类型(如果可用)。 -
事务状态从本地事务表中获取,并返回到
TransactionStatusConnector对象。
4.1.4.3. 查看事务历史记录 复制链接链接已复制到粘贴板!
默认情况下,事务服务不会维护任何关于事务的历史记录。但是,您可以将事务服务的 reconcileEnvironmentBean.enableStatistics 属性变量设置为 true,以保持有关所创建交易数量及其相应结果的信息。
您可以使用以下管理 CLI 命令启用统计信息:
/subsystem=transactions:write-attribute(name=enable-statistics,value=true)
/subsystem=transactions:write-attribute(name=enable-statistics,value=true)
您可以使用 com.arjuna.ats.arjuna.coordinator.TxStats 类,以编程方式获取更详细的事务统计信息。
示例: TxStats 类
com.arjuna.ats.arjuna.coordinator.ActionManager 类使用 getNumberOfInflightTransactions 方法来提供有关当前活动事务列表的进一步信息。