如何衡量Python程序的整体内存需求

时间:2009-09-17 13:07:14

标签: python

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

我最近对程序进行了更改,这可能会改变程序的整体内存需求。如果有什么事情发生了变化,我想知道,如果没有,我可以向我的管理层保证,由于内存使用量增加,不可能出现故障。

顺便说一下,可以从命令行运行在Excel中运行的相同功能:

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

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

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

平台是Windows XP 32位,python 2.4.4

2 个答案:

答案 0 :(得分:2)

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

一种更好的方法,虽然它没有回答您的标题问题,但是尝试在job object下使用SetInformationJobObject JOBOBJECT_EXTENDED_LIMIT_INFORMATION具有合适{{3}}结构的{{3}}下运行该流程1}}(例如1GB最大虚拟内存)和ProcessMemoryLimit中的右侧标志以激活该限制。这样,如果进程正确运行,您将知道它从未使用超过1 GB的虚拟内存 - 否则,它将因内存不足错误而崩溃。

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

答案 1 :(得分:1)

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

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

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