2012-09-06 54 views
1

正如我所說的,我想記錄程序運行時使用的最大內存。有沒有辦法記錄在PERL中運行的最大內存

+1

什麼內存?使用的系統內存總量,或perl腳本本身使用的內存,還是某些其他應用程序使用的內存? – s0me0ne

+1

分配後,perl不會將內存釋放回操作系統,直到過程結束。從這個意義上說,在程序退出之前測量內存使用量就足夠了。 – mob

+1

你可以看看'ps'輸出(或'top')來得到一個大概的想法。問題通常是與進程關聯的共享庫使用的內存;即哪個進程會「收取」內存使用量? – JRFerguson

回答

4

Devel::Size一次只能測量內存大小一個一個具體的數據結構來衡量你的腳本基於UNIX使用的所有數據結構的總內存大小Proc::ProcessTable爲它提供了一個很好的API:

這是一個簡單的腳本,將它與Devel :: Size進行比較。

#!/usr/bin/perl -w 
use strict; 
use Proc::ProcessTable; 
use Devel::Size qw(size); 


my @arr = ('A' .. 'M'); 
my $devel_size = size(\@arr); 
print "With DEVEL::SIZE I'm $devel_size bytes big\n"; 


my $t = Proc::ProcessTable->new(); 

foreach my $p (@{$t->table}) { 
    if($p->pid() == $$) { 
    print "With Proc::ProcessTable I'm ", $p->size(), " bytes big.\n"; 
     last; 
    } 
} 

它提供:

隨着DEVEL::SIZE我是104個字節大。
Proc::ProcessTable我是5357568字節大。

注:信息來源:http://www.perlmonks.org/

相關問題