SuperAPI AI 工具集

windbg-user-virtual-memory-exhaustion

智能体与模型

查看项目

更新于 10-16 00:32

技能介绍

用途:当原生应用、服务或用户模式驱动宿主(含 UMDF)出现 E_OUTOFMEMORY (0x8007000E)、STATUS_NO_MEMORY (0xC0000017)、bad_alloc 或堆/虚拟分配失败时,使用本技能区分虚拟地址(VA)耗尽、碎片化与系统提交压力,不适用于托管 .NET。

使用方式:需先加载 windbg-diagnostic-method 并全程应用,再进行证据排序、假设检验与报告验证。记录实际 API、请求大小/对齐、架构、标志与错误。空闲物理内存不能排除 VA 不足、提交压力或相关限制。

主要能力与工作流:一、用 !address -summary、!address、!heap -s 检查进程 VA 映射,对比可用区域与目标分配的连续范围和对齐要求,区分保留、已提交、空闲、映像、映射、栈与堆区间,数据缺失应如实报告。二、区分压力机制:VA 耗尽、碎片化、系统提交压力、进程/作业内存限制、分配策略或 API 失败,各需相应证据;系统提交数据应使用同期计数器或适当会话。32 位目标检查 /LARGEADDRESSAWARE 与宿主架构。三、用 !address -f:Heap、!address -f:Stack、!heap -stat -h <heap-address> 识别主要消费者,大分配不一定是泄漏。四、通过授权的时间序列计数器、重复快照或分配/释放跟踪建立增长证据,对比预热与稳态。单一快照加进程运行时间不能证明泄漏速率。

修复与验证:按大小/代价策略限制缓存并验证驱逐;匹配 VirtualAlloc 保留与 VirtualFree 释放契约;用 RAII 释放资源;在允许时降低大块连续分配需求;不要盲目提高限制或掩盖分配失败。验证需命名失败分配与压力机制,以证据指出消费者,并在预热、持续负载与清理中验证内存受限或分配成功。

限制:需依赖 WinDbg 扩展与相应转储数据;部分堆/映射数据可能不可用;系统提交需实时或内核会话,进程 PEB 不是文档化的 MaximumCommit 来源。反馈应遵循 FEEDBACK.md,提交时包含技能名与 plugin.json 版本,不上传转储或内存内容。