代码之家  ›  专栏  ›  技术社区  ›  Zaid

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

  •  2
  • Zaid  · 技术社区  · 15 年前

    我在Windows下使用activeperl编写Perl脚本,这样我就可以通过Windows任务管理器中的“进程”选项卡查看它使用了多少内存。

    我觉得这样做很麻烦。是否有其他方法来确定Perl程序的内存使用?

    4 回复  |  直到 15 年前
        1
  •  4
  •   Charlie    15 年前

    如果您使用的是ActivePerl,其中一些解决方案将无法工作。我已经在ActivePerl中拼凑了一些我认为应该开箱即用的东西,但是它还没有在5.10以下进行测试,所以你的里程可能会有所不同。正如帕克斯所回答的,你可以根据你的要求得到不同的号码,也就是说, 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
  •  7
  •   chaos    15 年前

    一种方法是使用 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;
        }
    }
    
        3
  •  2
  •   paxdiablo    15 年前

    在Windows下,WMI是从程序内部检查此类内容的标准方法。我相信你会找的 this .

    MaximumWorkingSetSize 是正在使用的物理RAM的值。 VirtualSize 是正在使用的总地址空间的大小。

        4
  •  1
  •   Sinan Ünür    15 年前

    尝试:

    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 .