大内存虚拟机在 vMotion 期间内存传输导致的无响应问题

大内存虚拟机在 vMotion 期间内存传输导致的无响应问题

老哥们,今天遇到一个关于虚拟机迁移vmotion的严重问题——分配了大量内存的VM在进行 vMotion 时,可能会在内存传输阶段出现周期性无响应,甚至导致应用程序不可用和性能下降。查了一下 VMware KB 427086,原来这是由于精细内存跟踪缓冲器溢出导致的。

故障现象还原

1. 虚拟机无响应

在 vMotion 内存传输期间,虚拟机可能会经历:

  • 应用程序无响应
  • 客户端 I/O 命令失败
  • 性能严重下降

2. ESXi 主机日志信息

/var/run/log/vmkernel.log 中,会看到以下信息:

YYYY-MM-DDTHH:MM:SS.Z In(182) vmkernel: cpu133:45716049)PVSCSI: 2769: scsi1:2: SCSI ABORT ctx=0x363
YYYY-MM-DDTHH:MM:SS.Z Wa(180) vmkwarning: cpu40:45715994)WARNING: VMotion: 1451: 8686083635737680100 S: Waited 30.315 seconds for the monitor to process a preCopyNext action. This may cause unexpected vMotion failures.

3. 虚拟机日志信息

/vmfs/volumes///vmware.log 文件中,会看到 SCSI 中止和重置信息:

YYYY-MM-DDTHH:MM:SS.Z In(05) vcpu-77 - PVSCSI: scsi3:2: aborting cmd 0x2dc
YYYY-MM-DDTHH:MM:SS.Z In(05) vcpu-92 - PVSCSI: scsi2:2: aborting cmd 0x37a
YYYY-MM-DDTHH:MM:SS.Z In(182) vmkernel: cpu188:45716086)VSCSI: 3473: handle 196348699146723760(GID:8624)(vscsi0:3):Reset request on FSS handle 1892843346 (0 outstanding commands) from (vmm0:)

核心原因分析

根据 KB 427086 的解释,问题的根本原因是:

精细内存跟踪缓冲器溢出

当虚拟机在 vMotion 期间同时处理大量 I/O 请求时:
1. 高 I/O 活动会导致精细内存跟踪缓冲器溢出
2. 系统会回退到粗粒度跟踪模式
3. 在这种模式下,单个内存变更会标记整个大内存块为已修改,而不是仅标记特定页面
4. 这种“放大”效应会极大地增加 CPU 开销,导致系统过载和 I/O 超时

解决方案

1. 未来版本改进

根据 KB 文章,VMware 已经在即将发布的 VCF 9.1 版本中彻底解决了这个问题。新版本将改变 vMotion 期间内存跟踪的实现方式,消除缓冲器溢出和内存跟踪放大效应。

2. 临时解决方法

虽然目前没有立即的修复补丁,但可以通过以下方法减轻问题:

# 1. 在低 I/O 活动期间执行 vMotion
# 这可以减少缓冲器溢出的风险

 

# 2. 调整虚拟机的内存配置
# 对于非常大的内存分配,可以考虑:
# - 减少内存分配(如果可能)
# - 调整内存预留和限制设置

 

# 3. 监控系统资源使用情况
# 在 vMotion 过程中,密切监控主机的 CPU 和内存使用情况
esxcli system process list | sort -k 3 -r

 

# 4. 使用网络优化
# 确保 vMotion 网络带宽充足
esxcli network vswitch standard list

 

# 调整 vMotion 网络 MTU(如果支持)
esxcli network vswitch standard portgroup set -p "vMotion" -m 9000

操作步骤

1. 检查虚拟机和主机状态

# 检查虚拟机内存分配
Get-VM | Select-Object Name, MemoryGB, NumCpu

 

# 检查主机资源使用情况
Get-VMHost | Select-Object Name, CpuUsageMhz, CpuTotalMhz, MemoryUsageGB, MemoryTotalGB

2. 监控 vMotion 过程

# 在 vMotion 过程中,使用 PowerCLI 监控资源使用情况
Get-VMHost | Get-Stat -Stat cpu.usage.average, mem.usage.average -Realtime | Select-Object @{N="Host";E={$_.Entity.Name}}, @{N="Metric";E={$_.MetricId}}, @{N="Value";E={$_.Value}}, @{N="Timestamp";E={$_.Timestamp}}

3. 分析日志信息

# 查看 vMotion 相关的警告和错误
Get-VMHost -Name  | Get-Log -Key vmkernel | Where-Object {$_.Message -like "*vmotion*" -and $_.Severity -gt "Info"}

预防措施

1. 规划迁移时间

# 在低业务负载时段执行虚拟机迁移
# 使用 PowerCLI 检查虚拟机活动
Get-VM | Select-Object Name, @{N="CPUUsage";E={$_.ExtensionData.Summary.QuickStats.OverallCpuUsage}}, @{N="MemoryUsage";E={$_.ExtensionData.Summary.QuickStats.HostMemoryUsage}}

2. 优化内存配置

# 调整虚拟机内存预留和限制
Get-VM -Name  | Set-VM -MemoryReservationGB  -MemoryLimitGB  -Confirm:$false

3. 监控系统资源

# 使用 vRealize Operations Manager 或其他监控工具
# 设置资源使用情况的警报和通知

故障排查

1. 识别受影响的虚拟机

# 根据日志信息识别受影响的虚拟机
Get-VM | ForEach-Object {
    $vm = $_
    $vmwareLog = Get-Content (Get-VMHost -Id $vm.VMHostId | Get-Datastore | ForEach-Object {
        "$($_.DatastoreBrowserPath)$($vm.FolderPath.Split('/')[-1])/$($vm.Name).log"
    }[0])
    if ($vmwareLog -match "scsi.*abort") {
        $vm | Select-Object Name, MemoryGB, NumCpu
    }
}

2. 检查网络配置

# 验证 vMotion 网络配置
Get-VMHostNetworkAdapter -VMHost  -VirtualSwitch 

总结

VMware KB 427086 详细说明了大内存虚拟机在 vMotion 过程中出现的内存传输导致无响应的问题。虽然目前没有立即的修复方案,但了解问题的原因可以帮助我们更好地规划和优化虚拟机迁移过程。

建议:
1. 在低 I/O 活动期间执行 vMotion
2. 密切监控系统资源使用情况
3. 调整虚拟机内存配置(如有可能)
4. 等待 VCF 9.1 版本的正式发布,该版本将彻底解决此问题

记住,对于分配了大量内存的虚拟机,vMotion 过程需要特别注意,因为它们对资源的需求更高,更容易受到内存跟踪放大效应的影响。


Reference: VMware KB 427086

有VM问题需要协助?

免费试用VMware技术助理(已接Deepseek)!即时解答VM难题

→ 🤖VM技术助理

解析和诊断各类vCenter错误,ESXi日志,虚拟机vmware.log

→ 📕VMware日志分析器

图书推介 - 京东自营

24小时热门

还有更多VMware问题?

免费试下我们的VMware技术助理(已接Deepseek)!即时解答VM难题 → 🤖VM技术助理

试试 📕VMware日志分析器 免费诊断各类vCenter错误,ESXi日志,虚拟机vmware.log等等

########

扫码加入VM资源共享交流微信群(请备注加群

需要协助?或者只是想技术交流一下,直接联系我们!

推荐更多

大内存虚拟机在 vMotion 期间内存传输导致的无响应问题
运维必备

大内存虚拟机在 vMotion 期间内存传输导致的无响应问题

大内存虚拟机在 vMotion 期间内存传输导致的无响应问题。详细解析大内存虚拟机在 vMotion 期间内存传输过程中出现的无响应问题,重点说明精细内存跟踪缓冲器溢出的原因,提供目前的解决方案和未来版本的改进,帮助管理员优化虚拟机迁移过程。 本文针对该问题提供了深度剖析与实测解决方案。

vapi-endpoint 服务启动失败导致 vCenter Web Client 无法登录
运维必备

vapi-endpoint 服务启动失败导致 vCenter Web Client 无法登录

vapi-endpoint 服务启动失败导致 vCenter Web Client 无法登录。详细解析 vCenter Web Client 无法登录的问题,重点说明 vapi-endpoint 服务因解决方案用户证书无效导致的启动失败,提供完整的 vSphere Certificate Manager 操作步骤,帮助管理员快速恢复登录功能。 本文针对该问题提供了深度剖析与实测解决方案。

vCenter Server 虚拟机的快照最佳实践
运维必备

vCenter Server 虚拟机的快照最佳实践

vCenter Server 虚拟机的快照最佳实践。详细解析 vCenter Server 虚拟机的快照最佳实践,重点说明 vCenter HA、增强型链接模式 (ELM) 和独立 vCenter 的不同快照策略,帮助管理员避免复制和恢复问题。 本文针对该问题提供了深度剖析与实测解决方案。

ESXi 存储取消掩码后重新扫描无法完成的解决方法
运维必备

ESXi 存储取消掩码后重新扫描无法完成的解决方法

ESXi 存储取消掩码后重新扫描无法完成的解决方法。详细解析 ESXi 主机在存储取消掩码后重新扫描任务无法完成的问题,重点说明 hostd 进程死锁的原因,提供分步的解决方法,帮助管理员快速恢复存储管理功能。 本文针对该问题提供了深度剖析与实测解决方案。

//omg10.com/4/9119499