本文介绍如何对服务器消息块(SMB)文件服务器上的事件 ID 1020 事件进行故障排除。
原始 KB 数: 4562940
现象
在基于 Windows Server 的 SMB 文件服务器上,在 Microsoft-Windows-SMBServer/Operational 事件日志中观察来自 SMB-Server 的事件 ID 1020 事件。 这些事件中的信息类似于以下消息:
文件系统操作花费的时间比预期长。 客户端名称: <Client-IP/Name> 客户端地址: <Client-IP>:<Client-Port> 用户名: <用户名> 会话 ID: <SMB-Session-ID> 共享名称: <SMB-Share-Name> 文件名: <文件名> 命令: <SMB-Command-Code> 持续时间(以毫秒为单位): <持续时间> 警告阈值(以毫秒为单位):15000 指导: 基础文件系统花费的时间太长,无法响应操作。 这通常表示存储问题,而不是 SMB。
当 Windows 记录这些事件时,你可能还会观察到以下症状:
- SMB 服务器的客户端遇到性能问题。 由于 SMB 服务器代表其 SMB 客户端访问本地文件系统,因此 SMB 服务器上的性能问题直接影响客户端。 如果客户端应用程序与 SMB 服务器的交互涉及多个连续操作,并且每个操作都遇到延迟,则客户端应用程序可能会经历很长的等待时间。
- SMB 服务器的客户端可能无法访问 SMB 服务器管理的共享。
- SMB 服务器的本地应用程序或其他组件遇到性能问题。 这些应用程序和组件可能无法记录此类性能问题。
- SMB 服务器似乎停止响应。
注意
性能问题可能不会同时或相同程度影响所有 SMB 服务器的磁盘。
原因
事件 ID 1020 指示 SMB 服务器的文件系统在允许的时间内无法完成读/写(I/O)操作。 默认情况下,允许的时间为 15 秒。 通常,我们希望此类操作在一位数的毫秒时间范围内完成。
文件系统筛选器驱动程序出现故障可能会导致几秒钟的延迟。 涉及 SMB 服务器物理磁盘的问题也可能导致严重降低性能。 此类问题包括:
- 物理磁盘重载。
- VSS 或其他备份解决方案导致磁盘冻结时间延长。
- 基础虚拟机监控程序的网络/存储堆栈性能不佳。
- 与物理磁盘的网络连接遇到问题。
- 存储设备本身(存储区域网络(SAN)、网络连接存储(NAS 或其他类型)遇到问题。
低于 15 秒阈值的文件系统延迟不会生成警告事件,但确实会降低 SMB 服务器的性能。
解决方法
由于这些文件系统延迟的原因可能取决于环境的具体情况,因此通常需要收集更多数据来隔离特定问题。
首先查看 SMB 服务器事件日志。 事件 ID 1020 事件包括有助于识别详细信息和模式的信息。 事件数据包括延迟的确切持续时间和遇到延迟的 SMB 命令代码。 有关 SMBv2 命令代码的列表,请参阅 2.2.1.2 SMB2 数据包标头 - SYNC。
收集跟踪日志
若要进一步诊断问题是否源自 Windows 操作系统(例如筛选器驱动程序)或外部(例如硬件、虚拟机监控程序、网络或存储),请使用 Storport Trace 等应用程序来收集跟踪数据。 使用 StorPortPacman 等工具检查磁盘响应时间。 Windows 存储堆栈下端的 StorPort 跟踪,SMB 服务器(或任何其他应用程序)在堆栈的上端遇到延迟。 有关 StorPortPacman 的详细信息,请参阅 Deciphering Storport Traces 101。
StorPort 级别的最高响应时间表示性能问题的原因位于操作系统之外。 若要确定系统在其逻辑磁盘(文件服务器)级别遇到的延迟,请启用 Perfmon 或 WPR 跟踪。 此类跟踪数据还显示小于 15 秒警告阈值的延迟。 有关详细信息,请参阅使用 Windows 性能监视器(Perfmon)测量磁盘延迟。
收集内核转储文件数据
对于极端延迟(10 分钟或更多分钟),在某些其他情况下,SMB 服务器将创建实时内核转储文件。 这些信息对于故障排除非常有用。
Microsoft-Windows-SMBServer/Operational 事件日志中的以下事件指示是否存在实时内核转储文件:
- 事件 ID 1031:服务器检测到问题,并捕获了实时内核转储来收集调试信息。
- 事件 ID 1032:服务器检测到问题,但无法捕获实时内核转储来收集调试信息。
Windows 将转储文件 放入 %SystemRoot%\LiveKernelReports 文件夹中。