2009-09-17 21 views
2

我有一個以Python 2.4.4編寫的財務定價應用程序,它以Excel插件的形式運行。 Excel對所有插件都有1GB的內存限制,所以如果任何插件進程試圖總共分配1Gb以上,它將導致Excel崩潰。我如何測量Python程序的整體內存需求

我最近對程序進行了更改,可能會改變程序的整體內存要求。我想確定是否有什麼變化,如果不是,我可以向管理層保證,由於內存使用量的增加,不會有任何失敗的機會。

順便說一句,有可能運行的Excel中從一個命令行運行相同的功能:

有效,我可以提供資料,從Excel從常規Windows提示時所產生的所有參數。這意味着如果我有一種方法可以自己發現進程的內存需求,我可以安全地推斷出它將在從Excel運行時使用相似的數量。

我對內存分析器可能給出的細節不感興趣:我不需要知道每個函數嘗試分配多少內存。我需要知道的是程序運行所需的最小內存量,而且我需要保證如果程序在1Gb的極限內運行,它將運行正常。

有關我如何做到這一點的任何建議?

平臺是Windows XP 32位,蟒蛇2.4.4

回答

2

我不相信XP會跟蹤進程的峯值內存需求(例如,Linux在/ proc/pid/status中的工作方式)。您可以使用第三方實用程序(如this one),並將其設置爲非常頻繁地「輪詢」該過程,以獲得抓取正確峯值的良機。

一種更好的方法,雖然它並沒有回答你的標題問題,是嘗試與具有合適​​(如最大1GB的虛擬內存)一個JOBOBJECT_EXTENDED_LIMIT_INFORMATION結構和正確的國旗下運行一個job object過程與SetInformationJobObjectJOBOBJECT_BASIC_LIMIT_INFORMATION來激活該限制。這樣,如果進程正確運行,您將知道它從未使用過超過1 GB的虛擬內存 - 否則,它將崩潰並出現內存不足錯誤。

該程序化方法還允許測量峯值,但與使用已打包的工具相比,它足夠複雜,我認爲不推薦用於此目的。我不知道哪些打包的工具可以讓你使用工作對象來特別限制可用於流程的資源(儘管我聽到有些可用的,自由或商業的,我從來沒有遇到過我)。

1

簡單的解決方案可能只是從命令行運行你的應用,並使用任務管理器,看看它使用多少內存。

編輯: 對於更復雜的東西看看這個問題/答案How to get memory usage under Windows in C++

編輯:另一種選擇。獲取Process Explorer。它基本上是類固醇的任務管理器。它會爲您記錄流程的高峯使用情況。 (它是免費的,所以你不必擔心成本)

+0

這隻能告訴我應用程序的即時內存使用情況。例如,如果它抓住了一個內存負載,然後釋放它,我永遠不知道。所以不幸的是,這並沒有回答這個問題。 – 2009-09-17 13:58:38

相關問題