2009-07-12 25 views

答えて

4

ActivePerlを使用している場合、これらのソリューションの一部は動作しません。私は、ActivePerlの箱の中で動作するはずのものを一緒に飾ったが、5.10未満でテストされていないので、あなたの走行距離は変わるかもしれない。パックスは答えとして、あなたはCygwinがインストールされている場合、これはWindowsでのみ動作します

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"; 
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

など、WorkingSetSizeMaximumWorkingSetSize、あなたはすなわち、を求めるものに応じて異なる番号を取得することができます。 – Joel

1

試してみてください。

open(STAT , "</proc/$$/stat") 
    or die "Unable to open stat file"; 
@stat = split /\s+/ , <STAT>; 
close(STAT); 

あなたがPerlMonksの "Determining memory usage of a process" と "Determining the Memory Usage of a Perl program from within Perl" を見てみることができます。

+2

Krish、コードの書式設定を修正しましたが、この回答がWindows環境に関連しているかどうかはわかりません。 – paxdiablo

+0

Pax、訂正ありがとう – joe

2

WMIは、プログラムの中からこの種のものを調べるための標準的な方法です。私はあなたがthisを探していると信じています。

MaximumWorkingSetSizeは、使用中の物理RAMの値です。 VirtualSizeは、使用している総アドレススペースのサイズです。