对 Windows 10 计算机上的 MS DTC 启用诊断跟踪

本文讨论如何在 Windows 10 计算机上为 Microsoft 分布式事务处理协调器(MS DTC)启用诊断跟踪。

原始产品版本:  Windows 10
原始 KB 数:  926099

重要

本文包含有关如何修改注册表的信息。 修改注册表之前,一定要先对其进行备份。 并且一定要知道在发生问题时如何还原注册表。 有关如何备份、还原和修改注册表的详细信息,请参阅适用于高级用户的 Windows 注册表信息

跟踪功能的类型

  • 事务管理器跟踪

    事务管理器(TM)跟踪跟踪事务状态更改。 它由 MS DTC 事务管理器生成。 输出采用二进制格式,必须对输出进行格式化。 事务管理器是 MS DTC 服务的一部分。

  • 通信管理器错误跟踪

    通信管理器(CM)错误跟踪跟踪加载Msdtcprx.dll文件的任何进程,并使用 ms DTC 的远程过程调用(RPC)接口与其他 ms dtc 相关进程进行通信。 输出采用文本格式。 0x8004d00a错误是一个典型错误,其中通信管理器错误跟踪可能有用。

备注

事务管理器跟踪和通信管理器错误跟踪是独立的过程。 您可以独立启用事务管理器跟踪和通信管理器错误跟踪。 或者,您可以单独禁用它们。

启用事务管理器跟踪

您可以使用 "组件服务" Microsoft 管理控制台(MMC)管理单元来启用事务管理器跟踪。 为此,请按照下列步骤操作:

  1. 选择 "开始",选择 "所有程序",选择 "附件",然后选择 "运行"。

  2. 键入 " Comexp",然后选择 "确定"

  3. 依次展开 "组件服务"、"计算机"、 "我的电脑",展开 "分布式事务管理器",右键单击 "本地 DTC",然后选择 "属性"。

  4. 选择 "跟踪" 选项卡。

  5. 在 "跟踪" 选项卡上,您可以修改以下 TM 跟踪选项:

    • 跟踪输出
      • 跟踪事务
        • 跟踪所有事务
        • 跟踪中止的事务
        • 跟踪长时间生存期的事务

更改 TM 跟踪配置时,MS DTC 服务会检测到更改。 不过,您无需回收该过程。 例如,当您更改跟踪的事务或跟踪文件的位置时,MS DTC 服务会在注册表中检测到更改。 您无需重新启动 MS DTC 服务。

Windows 中新的 MS DTC 跟踪系统

在 Windows 中,MS DTC 有一个新的、更广泛的跟踪系统。 新系统具有以下设计目标:

  • 仅需要单行代码才能添加格式化跟踪。
  • 在没有网络的情况下,人们可在生产计算机上阅读跟踪。
  • 输出选项是灵活的。
  • 跟踪速度快。
  • 您无需重新启动计算机即可更改选项。

此外,在 Windows 10 和 Windows Server Technical Preview 中,跟踪日志文件名称包括调用跟踪日志的进程的名称。 这由输出注册表项控制。

配置跟踪

警告

如果使用注册表编辑器或使用其他方法错误地修改了注册表,则可能会发生严重问题。 这些问题可能需要重新安装操作系统才能解决。 Microsoft 无法保证可以解决这些问题。 修改注册表的风险由您自行承担。

跟踪配置位于本地节点上,在 Tracing MS DTC 注册表项下命名的注册表项中。 该 Tracing 注册表项包括连接管理器跟踪。 以前,您使用 TraceCMErr 注册表项配置了连接管理器跟踪。 该 Tracing 注册表项包含以下两个子键:

  • Sources:此子项配置跟踪的类型。
  • Output:此子项配置跟踪输出的发送位置。

备注

请确保该进程可以访问 Tracing 注册表项。 默认情况下,Windows 配置不会创建此项,也不会向此项授予权限。 您可以使用注册表编辑器配置跟踪功能。

若要创建跟踪功能注册表项,请按照以下步骤操作:

  1. 选择 "启动 > 所有程序 > 附件 > 运行",键入regedit,然后选择 "确定"

  2. 找到并选择下列子键之一:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Tracing\Sources
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Tracing\Output
  3. 在 "编辑" 菜单上,选择 "新建",然后选择条目的数据类型。 例如,选择 " DWORD (32位)值"。

  4. 键入所需源的名称,然后按 ENTER。 有关源名称的详细信息,请参阅配置源部分中的表。

  5. 右键单击新的注册表项,选择 "修改",在 "值数据" 框中键入所需的值,然后选择 "确定"

  6. 在 "文件" 菜单上,选择 "退出"。

配置源

Sources 注册表项包含下表中列出的一组 DWORD 注册表值。

名称 说明
TRACE_MISC 无法分类到其他类别的跟踪
TRACE_CM 连接管理器中的跟踪
TRACE_TRACE 跟踪基础结构本身
TRACE_SVC 跟踪服务和 .exe 文件启动
TRACE_GATEWAY 网关源
TRACE_UI 跟踪用户界面
TRACE_CONTACT 跟踪联系人池和联系人
TRACE_UTIL 跟踪从多个位置调用的实用工具例程
TRACE_CLUSTER 跟踪特定于群集(实用程序)的代码
TRACE_RESOURCE 跟踪特定于群集资源的代码
TRACE_TIP 事务 Internet 协议(提示)跟踪源
TRACE_XA XA 事务管理器(XATM)跟踪源
TRACE_LOG 日志跟踪
TRACE_MTXOCI MTS/OCI 层(Mtxoci.dll)跟踪源
TRACE_ETWTRACE Windows 事件跟踪(ETW)跟踪源
TRACE_PROXY MSDTC 代理 DLL 中生成的跟踪
TRACE_KTMRM 用于与内核事务管理器集成的跟踪
TRACE_VSSBACKUP 与 Microsoft Visual SourceSafe 备份和还原机制的集成跟踪
TRACE_PERFMON 对性能计数器的支持跟踪

DWORD 值应为介于0到255之间的数字。 DWORD 值表示所发生的跟踪级别。 下表列出了可能的 DWORD 值。

说明
0 常量字节 TRACE_OFF
1 常量字节 TRACE_ERROR
2 常量字节 TRACE_WARNING
第三章 常量字节 TRACE_INFO
4 常量字节 TRACE_VERBOSE
5 常量字节 TRACE_VERY_VERBOSE
6 常量字节 TRACE_INOUT
0xF0 常量字节 TRACE_OBSCURE
0xFF 常量字节 TRACE_EVERYTHING

备注

较高的值将自动包含较低的值。 因此,在启用级别时 TRACE_INFOTRACE_ERROR 也会启用级别。 非常少的源使用高于该级别的任何跟踪 TRACE_VERBOSE

配置跟踪输出

警告

如果使用注册表编辑器或使用其他方法错误地修改了注册表,则可能会发生严重问题。 这些问题可能需要重新安装操作系统才能解决。 Microsoft 无法保证可以解决这些问题。 修改注册表的风险由您自行承担。

Output 注册表项包含一组值,用于控制跟踪输出的发送位置。 这些值如下所示:

  • TraceFilePath(REG_SZ)值是应在其中存储跟踪文件的根文件夹。 将跟踪写入名为msdtc-X的文件夹中的文件。 在此文件夹名称中, X表示创建文件的进程的十进制 PID。 请确保所有感兴趣的过程都能访问配置的文件夹。 否则,跟踪信息将丢失。 如果未设置此值,则不会将跟踪发送到文件。

  • ImageNameInTraceFileNameEnabled(REG_DWORD)值确定生成的跟踪日志文件的名称是否包括调用跟踪日志的进程的图像文件名。 如果将此值设置为非零值,则进程的图像文件名将包含在生成的跟踪日志文件中。 如果将此值设置为0,则将不会在生成的跟踪日志文件中包含进程的图像文件名。 默认情况下,该值设置为零(0)。 下面是生成的日志文件包含此过程的跟踪文件名的示例:
    MSDTC-msdtc.exe-3552MSDTC-svchost.exe-3556

  • MemoryBufferSize(REG_DWORD)值是存储跟踪消息的循环缓冲区的大小。 如果此值设置为0,则禁用内存跟踪。 默认情况下,此值为 10 MB。 如果启用详细跟踪,则可能需要增加此值。

  • DebugOutEnabled(REG_DWORD)值启用或禁用对调试器的输出。 如果值为非零,则启用输出。 默认情况下,此 Output 注册表项处于禁用状态。当您更改连接管理器错误跟踪配置时,所做的更改会在回收Msdtcprx.dll文件的进程时生效。 例如,对连接管理器错误跟踪配置所做的更改会在回收 MS DTC 服务进程时生效。

或者,也可以创建一个 .reg 文件,然后可以使用注册表编辑器导入该文件。 为此,请按照下列步骤操作:

  1. 创建一个包含以下代码示例的新 .reg 文件:

    Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Tracing]
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Tracing\Output]
    "DebugOutEnabled"=dword:00000000
    "TraceFilePath"=""
    "MemoryBufferSize"=dword:0000000a
    "ImageNameInTraceFileNameEnabled"=dword:00000001
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Tracing\Sources]
    "TRACE_MISC"=dword:00000000
    "TRACE_CM"=dword:00000000
    "TRACE_TRACE"=dword:00000000
    "TRACE_SVC"=dword:00000000
    "TRACE_GATEWAY"=dword:00000000
    "TRACE_UI"=dword:00000000
    "TRACE_CONTACT"=dword:00000000
    "TRACE_UTIL"=dword:00000000
    "TRACE_CLUSTER"=dword:00000000
    "TRACE_RESOURCE"=dword:00000000
    "TRACE_TIP"=dword:00000000
    "TRACE_XA"=dword:00000000
    "TRACE_LOG"=dword:00000000
    "TRACE_MTXOCI"=dword:00000000
    "TRACE_ETWTRACE"=dword:00000000
    "TRACE_PROXY"=dword:00000000
    "TRACE_KTMRM"=dword:00000000
    "TRACE_VSSBACKUP"=dword:00000000
    
  2. 选择 "启动 > 所有程序 > 附件 > 运行",键入regedit,然后单击 "确定"

  3. 在 "文件" 菜单上,选择 "导入"。

  4. 找到您在步骤1中创建的文件,然后选择 "打开"。 将显示 "注册表编辑器" 对话框。

  5. 选择“确定”****。

  6. 在 "文件" 菜单上,选择 "退出"。

性能影响

默认情况下,在 Windows 中禁用跟踪功能。 因此,在常规安装中不存在任何性能影响。

请勿在生产计算机上启用跟踪功能,除非 Microsoft 客户支持专家指示需要跟踪信息才能诊断问题。 跟踪可能会影响计算机性能。 首先,您必须找出问题,并且您必须解决它。 然后,立即禁用跟踪功能。

群集配置

对于群集安装,请确保所有节点上的所有注册表项都包含这些注册表项。 对于任何不包含这些注册表项的节点,群集代码将忽略共享注册表中的注册表项,这是因为本地计算机注册表中不存在这些注册表项。