2010-09-30 85 views
8


我正在Ubuntu上開發一個Python應用程序,我正在Python中使用子進程運行外部二進制文件。由於這些二進制文件是在運行時生成的並且可能變得流氓,所以我需要對這些二進制文件的內存佔用量和運行時間保持嚴格的選項卡。有沒有辦法在運行時限制或監視這些二進制程序的內存使用情況?我真的很討厭在子過程中使用類似「ps」的東西來達到這個目的。檢查Python中子進程的內存使用情況

回答

4

有一個你的子進程的PID號碼,你可以閱讀從proc file-system所有信息。使用:

的/ proc/[PID]/smaps(因爲Linux 2.6.14) 此文件顯示內存消耗用於每個進程的映射。 對於每個映射的有線的串聯 如下:

的/ proc/[PID]/statm 提供有關內存使用情況,在頁測得的信息。

另外,您可以限制哪些子可以AQUIRE資源:

subprocess.Popen('ulimit -v 1024; ls', shell=True) 

當達到給定虛擬內存限制進程失敗,內存不足。

+1

我需要在Python中實現它。所以我需要fork一個子進程,同時運行一個while循環來監視/ proc /(pid)/ smaps文件。是不是有其他方式,例如:我可以爲子進程分配固定內存?我希望以某種方式使用python的內存管理器。 – Neo 2010-09-30 13:15:31

+0

當時,從來沒有想到這一點。是的,這對我來說應該很好。 – Neo 2010-09-30 13:57:41

+2

ulimit已過時。摘自手冊頁:「警告:此例程已過時,請改爲使用getrlimit(2),setrlimit(2)和sysconf(3)。」感謝哈比, – omikron 2016-10-07 11:25:21

10

在生成子進程之前,可以使用Python的resource模塊設置限制。

對於監控,resource.getrusage()將爲您提供有關所有子流程的摘要信息;如果你想看到每個子進程的信息,你可以在另一個註釋中使用/ proc技巧(不可移植但有效),或者在每個子進程之間分配一個Python程序,並找出一些通信(便攜,醜陋,輕度有效)。

+0

,這就是我所需要的。 – Neo 2010-09-30 13:41:50