【问题标题】:How can I measure the overall memory requirements of a Python program如何测量 Python 程序的整体内存需求
【发布时间】:2010-11-29 03:42:30
【问题描述】:

我有一个用 Python 2.4.4 编写的财务定价应用程序,它作为 Excel 插件运行。 Excel 对所有插件都有 1GB 的内存限制,因此如果任何插件进程试图分配超过 1GB 的总内存,则会导致 Excel 崩溃。

我最近对程序进行了更改,这可能改变了程序的整体内存需求。我想弄清楚是否有任何重大变化,如果没有,我可以向我的管理层保证,不会因为内存使用量增加而发生故障。

顺便说一句,可以从命令行运行在 Excel 中运行的相同函数:

实际上,我可以提供所有从 Excel 生成的常规 Windows 提示符的参数。这意味着,如果我有一种方法可以自行发现进程的内存需求,我可以安全地推断出它在从 Excel 运行时将使用类似的数量。

我对内存分析器可能给出的细节不感兴趣:我不需要知道每个函数尝试分配多少内存。我需要知道的是程序运行所需的最小内存量,我需要保证如果程序在 1Gb 的限制内运行,它将运行正常。

关于如何做到这一点的任何建议?

平台是Windows XP 32bit,python 2.4.4

【问题讨论】:

    标签: python


    【解决方案1】:

    我不相信 XP 会跟踪进程的峰值内存需求(例如 Linux 在 /proc/pid/status 中所做的方式)。您可以使用第三方实用程序(例如 this one)并将其设置为非常频繁地“轮询”该过程,以获得抓住正确峰值的好机会。

    一个更好的方法,虽然它不能回答你的标题问题,是尝试在 job object 下运行进程,SetInformationJobObjectJOBOBJECT_EXTENDED_LIMIT_INFORMATION 结构具有合适的 ProcessMemoryLimit(例如 1GB 最大虚拟内存)和JOBOBJECT_BASIC_LIMIT_INFORMATION 中的正确标志来激活该限制。这样,如果进程正确运行,您将知道它从未使用过超过 1 GB 的虚拟内存——否则,它将因内存不足错误而崩溃。

    这种编程方法也允许测量峰值,但与使用已打包的工具相比,它已经足够复杂了,我认为不推荐用于此目的。我不知道允许您使用作业对象来专门限制进程可用资源的打包工具(尽管听到有些可用,无论是免费的还是商业的,我都不会感到惊讶,我从来没有遇到过我自己)。

    【讨论】:

      【解决方案2】:

      最简单的解决方案可能只是从命令行运行您的应用并使用任务管理器查看它正在使用多少内存。

      编辑: 对于更复杂的事情,请查看这个问题/答案How to get memory usage under Windows in C++

      编辑:另一种选择。获取Process Explorer。它基本上是类固醇的任务管理器。它将为您记录进程的峰值使用情况。 (它是免费的,所以您不必担心费用)

      【讨论】:

      • 这只能告诉我应用程序的瞬时内存使用情况。例如,如果它抓取了大量内存然后释放它,我永远不会知道。所以不幸的是,这并不能回答这个问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多