0

0

如何使用Windows性能计数器收集应用程序内存泄漏的详细诊断信息?

狼影

狼影

发布时间:2025-10-30 23:57:01

|

860人浏览过

|

来源于php中文网

原创

性能计数器可有效诊断Windows应用内存泄漏。通过perfmon添加Process和.NET CLR Memory等关键计数器,监控Private Bytes、Working Set、Virtual Bytes及托管堆内存变化;设置数据收集器集以长时间记录(如每15秒采样),保存为CSV便于分析;观察内存是否持续增长且不回落,尤其在操作后无释放迹象;结合ProcDump抓取高内存时的dump文件,用Windbg或dotMemory分析对象保留情况,定位泄漏根源。需综合监控与快照工具,建立基线并对比差异以精准识别问题模块。

如何使用windows性能计数器收集应用程序内存泄漏的详细诊断信息?

要诊断Windows上应用程序的内存泄漏问题,性能计数器是关键工具之一。它能实时监控内存使用情况,帮助你识别异常增长趋势。以下是如何配置和使用性能计数器来收集与内存泄漏相关的详细信息。

启用并配置性能监视器

Windows自带的“性能监视器”(Performance Monitor)可以访问大量系统和应用程序级别的计数器。通过它你可以持续跟踪内存行为。

  • Win + R,输入 perfmon,回车打开性能监视器。
  • 在左侧导航栏选择“性能监视器”,点击绿色加号图标添加计数器。
  • 在“可用计数器”列表中,重点添加以下对象:
Process 对象下的关键实例(选择你的目标应用进程):
  • Private Bytes:表示该进程独占的物理和虚拟内存总量。持续上升而无回落是内存泄漏的重要信号。
  • Working Set:当前在物理内存中为该进程保留的页面。若增长超出预期,可能说明内存未被正确释放。
  • Virtual Bytes:进程使用的虚拟地址空间大小。过度增长可能意味着堆碎片或大块未释放内存。
.NET CLR Memory(仅限.NET应用):
  • # Bytes in all Heaps:.NET托管堆总内存。长期增长提示GC未能回收对象。
  • Gen 0/1/2 Collections:观察垃圾回收频率。若高代回收频繁但内存不降,可能存在根引用未释放。

设置数据收集器集进行长时间记录

短时间观察可能不足以发现缓慢泄漏。使用数据收集器集可记录数小时甚至数天的数据。

  • 在 perfmon 左侧树中展开“数据收集器集” → “用户定义”,右键新建一个数据收集器集。
  • 选择“手动创建(高级)”,点击下一步。
  • 勾选“性能计数器”,然后添加上述提到的关键计数器。
  • 设置采样间隔(例如每15秒),建议至少运行几小时或复现问题所需的周期。
  • 指定日志保存路径(如CSV格式),便于后续分析。
  • 完成后启动收集器,在应用正常运行或执行可疑操作期间保持记录。

分析日志以识别泄漏模式

收集完成后,导入日志文件到性能监视器或用Excel打开CSV文件进行可视化分析。

Tellers AI
Tellers AI

Tellers是一款自动视频编辑工具,可以将文本、文章或故事转换为视频。

下载
  • 查看 Private Bytes 曲线是否呈持续上升趋势,尤其在执行相同操作后未回落。
  • 对比 Working SetPrivate Bytes:若前者稳定而后者增长,可能是非分页池或句柄泄漏。
  • 对于.NET应用,检查 # Bytes in all Heaps 是否随时间推移不断升高,即使触发了GC(可通过 Gen 2 回收次数判断)。
  • 确认是否存在周期性操作导致内存阶梯式上升,这有助于定位具体功能模块。

结合其他工具深入排查

性能计数器能告诉你“有没有泄漏”,但不能直接指出“哪里泄漏”。需要搭配专用工具进一步分析。

  • 使用 ProcDump(Sysinternals 工具)在内存高峰时自动抓取进程dump:
    procdump -ma -p MyApp.exe -c 500 (当 Private Bytes 超过500MB时生成dump)
  • WindbgVisual Studio 分析dump文件,查看对象分配情况。
  • .NET应用推荐使用 dotMemoryPerfView 进行堆快照对比,找出未释放的对象类型。

基本上就这些。合理配置性能计数器并配合内存快照工具,就能系统化地定位大多数内存泄漏问题。关键是建立基线、持续监控、对比变化。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

601

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1104

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

792

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

452

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2349

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

800

2023.08.10

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 12.6万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号