【问题标题】:What's the best tool to track a process's memory usage over a long period of time in Windows?在 Windows 中长期跟踪进程的内存使用情况的最佳工具是什么?
【发布时间】:2026-01-08 02:10:01
【问题描述】:

在很长一段时间内监控我的 C#/.Net windows 服务的内存使用情况的最佳可用工具是什么。据我所知,像 perfmon 这样的工具可以在短时间内监控内存使用情况,但不能在很长一段时间内以图形方式监控内存使用情况。我需要几天的趋势数据,而不是几秒钟。

为了清楚起见,我想在很长一段时间内以精细的细节水平监控内存使用情况,并让图表同时显示整个时间范围和细节水平。我需要一个小的采样间隔和一个大图。

【问题讨论】:

    标签: c# .net performance memory


    【解决方案1】:

    在我看来,Perfmon 是执行此操作的最佳工具之一,但请确保根据您希望监控的时间正确配置采样间隔。

    例如如果你想监控一个进程:

    • 1 小时:我会使用 1 秒的间隔(这将生成 60*60 个样本)
    • 1 天:我会使用 30 秒的间隔(这将生成 2*60*24 个样本)
    • 1 周:我会使用 1 分钟的间隔(这将生成 60*24*7 个样本)

    有了这些采样间隔,Perfmon 应该可以毫无问题地生成漂亮的计数器图形输出。

    【讨论】:

    • 是的,您可以更改采样间隔,但是这会在数据中留下巨大的空白。我要做的是在很长一段时间内以小采样间隔绘制内存使用情况。
    • 它也应该以更小的间隔工作。只是不要让它以 1 秒的间隔运行一整周;-) 在 Vista/Win2008 中,我打开了巨大的 BLG 文件没有问题。您还可以将数据导出为 CSV 并在其他一些统计工具(如 Excel)中进行分析。
    【解决方案2】:

    好吧,我使用了 perfmon,将结果导出到 csv,然后使用 excel 进行统计。上次我需要监控进程时效果很好

    【讨论】:

      【解决方案3】:

      玩弄计算机管理(假设您在这里运行 Windows),似乎您可以让它随着时间的推移监控进程。转到计算机管理 -> 性能日志和警报并查看计数器/跟踪日志。右键单击计数器日志并添加一个新日志。现在单击添加对象并选择内存。现在单击添加计数器并将“性能对象”更改为进程,然后选择您的进程。

      【讨论】:

        【解决方案4】:

        与监控内存本身一样好,您可能正在考虑使用内存分析来识别泄漏或陈旧对象 - http://memprofiler.com/ 在这里是一个不错的选择,但还有很多其他选择。

        如果您想做一些非常具体的事情,请不要害怕编写自己的基于 WMI 的记录器,该记录器在计时器上运行 - 您可以将其通过电子邮件发送给您处理统计信息,当它增长过快或过高时发出警告,将其作为 XML 发送用于图表等。

        【讨论】:

          【解决方案5】:

          如果您熟悉 Python,那么为此编写脚本非常容易。

          Activestate Python(免费)通过win32process 模块公开Win32 API 的相关部分。

          您也可以查看all win32 related modules 或使用gotAPI 浏览Python 标准库。

          【讨论】:

            【解决方案6】:

            我建议使用软件验证中的.Net Memory Validator 工具。 这个工具帮助我解决了许多与我必须使用的 .Net 应用程序中的内存管理相关的问题。

            我更频繁地使用 C++ 版本,但它们非常相似,而且您可以真正实时看到正在分配的对象的类型这一事实对您来说非常宝贵。

            【讨论】:

              【解决方案7】:

              如果您需要比 perfmon 更强大的功能,我会使用 ProcessMonitor。

              【讨论】:

              • ProcessMonitor 不监控内存使用情况;仅文件访问、注册表访问等。
              最近更新 更多