我在Windows下使用ActivePerl作为我的Perl脚本,所以我可以通过Windows任务管理器中的“进程”选项卡查看它使用了多少内存。
我觉得这样做很麻烦。还有另一种方法来确定我的Perl程序的内存使用吗?
答案 0 :(得分:7)
一种方法是使用Proc::ProcessTable
:
use Proc::ProcessTable;
print 'Memory usage: ', memory_usage(), "\n";
sub memory_usage() {
my $t = new Proc::ProcessTable;
foreach my $got (@{$t->table}) {
next
unless $got->pid eq $$;
return $got->size;
}
}
答案 1 :(得分:4)
如果您使用的是ActivePerl,其中一些解决方案将无效。我已经拼凑了一些我认为应该在ActivePerl中开箱即用的东西,但它还没有在低于5.10的情况下进行测试,所以你的里程可能会有所不同。正如Pax回答的那样,根据您的要求,您可以获得不同的数字,例如MaximumWorkingSetSize
vs WorkingSetSize
等。
use Win32::OLE qw/in/;
sub memory_usage() {
my $objWMI = Win32::OLE->GetObject('winmgmts:\\\\.\\root\\cimv2');
my $processes = $objWMI->ExecQuery("select * from Win32_Process where ProcessId=$$");
foreach my $proc (in($processes)) {
return $proc->{WorkingSetSize};
}
}
print 'Memory usage: ', memory_usage(), "\n";
答案 2 :(得分:2)
WMI是Windows下用于从程序中检查此类内容的标准方法。我相信你会寻找this。
MaximumWorkingSetSize
是正在使用的物理RAM的值。 VirtualSize
是您正在使用的总地址空间的大小。
答案 3 :(得分:1)
尝试:
open( STAT , "</proc/$$/stat" )
or die "Unable to open stat file";
@stat = split /\s+/ , <STAT>;
close( STAT );
您可以查看Determining memory usage of a process上的“Determining the Memory Usage of a Perl program from within Perl”和“PerlMonks”。