如何在Windows下以编程方式确定我的Perl程序的内存使用情况?

时间:2009-07-12 10:28:15

标签: perl memory-management

我在Windows下使用ActivePerl作为我的Perl脚本,所以我可以通过Windows任务管理器中的“进程”选项卡查看它使用了多少内存。

我觉得这样做很麻烦。还有另一种方法来确定我的Perl程序的内存使用吗?

4 个答案:

答案 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”。