Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Determining memory usage of a process...

by dragonchild (Archbishop)
on Sep 27, 2001 at 18:15 UTC ( [id://115098]=perlquestion: print w/replies, xml ) Need Help??

dragonchild has asked for the wisdom of the Perl Monks concerning the following question: (programs and processes)

How would I, from within the current process, determine my own memory usage?

Originally posted as a Categorized Question.

  • Comment on Determining memory usage of a process...

Replies are listed 'Best First'.
Re: Determining memory usage of a process...
by rob_au (Abbot) on Sep 28, 2001 at 16:22 UTC
    The best method to do this would be to make use of the Proc::ProcessTable module which provides access to the Unix process table in a consistent fashion, hiding the vagarities of different /proc implementations.

    The following documented code will return the total memory usage and the percentage memory utilisation of the current process by iteration through the process table:

    #!/usr/bin/perl -w use strict; print join("\n", &memusage), "\n"; exit 0; # memusage subroutine # # usage: memusage [processid] # # this subroutine takes only one parameter, the process id for # which memory usage information is to be returned. If # undefined, the current process id is assumed. # # Returns array of two values, raw process memory size and # percentage memory utilisation, in this order. Returns # undefined if these values cannot be determined. sub memusage { use Proc::ProcessTable; my @results; my $pid = (defined($_[0])) ? $_[0] : $$; my $proc = Proc::ProcessTable->new; my %fields = map { $_ => 1 } $proc->fields; return undef unless exists $fields{'pid'}; foreach (@{$proc->table}) { if ($_->pid eq $pid) { push (@results, $_->size) if exists $fields{'size'}; push (@results, $_->pctmem) if exists $fields{'pctmem'}; }; }; return @results; }

     

    Ooohhh, Rob no beer function well without!

Re: Determining memory usage of a process...
by Zaxo (Archbishop) on Sep 28, 2001 at 09:32 UTC

    On Linux (since h option differs from BSD),

    my $sz = `ps h -o sz $$`;
    Other ps stats can be gotten similarly. It uses the rich ps system call for process stats, see 'man ps'. Perl's $$ variable is the current pid.

    Another approach is to root around in the "/proc/$$/" or '/proc/self/' directory.

Re: Determining memory usage of a process...
by Fletch (Bishop) on Oct 03, 2001 at 05:12 UTC

    Check out GTop which sits on top of libgtop.

    my $mem = GTop->new; print "Total memory: ", $mem->total / 1024, "K\n";

    Edited by planetscape - closed code tag

    Originally posted as a Categorized Answer.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://115098]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (4)
As of 2025-05-25 02:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.