[kde-solaris] Memory Usage Redux (memstat.pl)
Joshua Symons
kde-solaris@mail.kde.org
Fri Mar 21 23:20:04 2003
Might want to rename it, there's already a script out there called
memstat.pl to show you what memory banks contain what on a sun system,
it's derived from prtconf. Maybe kmemstat.pl ?
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Joshua Symons < vmcore at mysun dot com >
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
----- Original Message -----
From: "LeBar, Russell J" <Russell.J.LeBar@erac.com>
Date: Friday, March 21, 2003 2:14 pm
Subject: [kde-solaris] Memory Usage Redux (memstat.pl)
> For those of you interested in getting an idea of how much memory
> is really
> being used by KDE (in general terms) here's a Perl script I wrote. I'm
> releasing it licensed under the GPL:
> http://www.gnu.org/licenses/gpl.txt. It
> runs under Solaris 8+ (I believe that's when the pmap command was
> introduced).
>
> Example usage (run as root for accurate answers):
>
> memstat.pl --user joe123 # All of joe123's processes
> memstat.pl --app kdeinit # All kdeinit processes
> memstat.pl --user joe123 --app kdeinit # Just joe123's kdeinit
> processes.memstat.pl -u joe123 -a kdeinit # Same as above but with
> less typing
>
>
> #!/usr/local/bin/perl
> # This code is released under the GPL.
> # Read the license at http://www.gnu.org/licenses/gpl.txt.
>
> use strict;
> use Getopt::Long;
> use FileHandle;
>
> #///////////////////////////////////////////////////////////
> my %Mem;
> my @Procs;
> my $App;
> my $User;
> my $Flags;
> my $Total_Total = 0;
> my $Total_Shared = 0;
> my $Total_Private = 0;
> my $HELP = 0;
>
> #///////////////////////////////////////////////////////////
> format procs_top =
> Command USER
> PID
> --------------------------------------------------------------------
> -----
> .
>
> format procs =
> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>>>>>
> @>>>>>>>>>>>>$_->[2], $_->[1],
> $_->[0]
> .
>
> #///////////////////////////////////////////////////////////
> format mem_top =
> File Shared Memory Private
> Memory--------------------------------------------------------------
> -----------
> .
>
> format mem =
> @<<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>>>>>>>>
> @>>>>>>>>>>>>$_, $Mem{$_}-
> >{sha}, $Mem{$_}->{pvt}
> .
>
> #///////////////////////////////////////////////////////////
> format totals_top =
> TOTALS: Shared + Private Memory Shared Memory Private
> Memory--------------------------------------------------------------
> -----------
> .
>
> format totals =
> @>>>>>>>>>>>> @>>>>>>>>>>>>
> @>>>>>>>>>>>> $Total_Total, $Total_Shared,
> $Total_Private
> .
>
> #///////////////////////////////////////////////////////////
> sub mysort () {
> $Mem{$a}->{pvt} <=> $Mem{$b}->{pvt} || $Mem{$a}->{sha} <=>
> $Mem{$b}->{sha} || $a cmp $b;
> }
>
>
> #///////////////////////////////////////////////////////////
> MAIN: {
> my $numopts = @ARGV;
> Getopt::Long::Configure('bundling');
> GetOptions(
> 'H|h|v|help|version' => \$HELP,
> 'u|user=s' => \$User,
> 'a|app=s' => \$App,
> );
>
> $App = undef unless defined $App && $App ne "";
> $User = undef unless defined $User && $User ne "";
>
> if((! defined $App && ! defined $User) || $numopts < 1 || $HELP
> ) {
> print "Usage $0 <[-a/--app App] || [-u/--user User]>\n";
> exit 5;
> }
>
> foreach ( map { [ (split ' ', $_)[0,1,2] ] } grep !/grep/, `ps -ea
> -o pid,user,comm` ) {
> next unless defined $_->[2]; # Avoid zombies and other weird
> things
>
> if( defined $User && defined $App ) { next unless
> $_->[2] =~ /$App/ && $_->[1] =~ /$User/ }
> elsif( defined $User && ! defined $App ) { next unless
> $_->[1] =~ /$User/ }
> elsif( ! defined $User && defined $App ) { next unless
> $_->[2] =~ /$App/ }
> else { next }
>
> push @Procs, $_;
>
> my @pmap = `pmap -x $_->[0]`; shift @pmap; shift @pmap; pop
> @pmap; pop @pmap; # Remove the first and last two lines.
> foreach my $p ( @pmap ) {
> my ( $sha, $pvt, $file ) = (split ' ', $p)[3,4,6];
>
> if( $file eq '[' ) {
> my $lsb = rindex $p, '[';
> my $rsb = rindex $p, ']';
> $file = substr $p, $lsb, $rsb-$lsb+1;
> }
>
> $Mem{$file}->{sha} = $sha unless $sha eq '-';
> next if $pvt eq '-';
> $Mem{$file}->{pvt} += $pvt;
> }
> }
>
> STDOUT->format_name( "procs" );
> STDOUT->format_top_name( "procs_top" );
>
> foreach ( @Procs ) { write }
> STDOUT->format_lines_left( 0 );
> print "\n\n";
> STDOUT->format_name( "mem" );
> STDOUT->format_top_name( "mem_top" );
>
> foreach ( sort mysort keys %Mem ) {
> $Mem{$_}->{sha} = 0 unless exists $Mem{$_}->{sha};
> $Mem{$_}->{pvt} = 0 unless exists $Mem{$_}->{pvt};
> write;
> $Total_Shared += $Mem{$_}->{sha};
> $Total_Private += $Mem{$_}->{pvt}
> }
>
> $Total_Total = $Total_Shared + $Total_Private;
> STDOUT->format_lines_left( 0 );
> STDOUT->format_name( "totals" );
> STDOUT->format_top_name( "totals_top" );
> write;
> }
>
>
>
>
> Russ LeBar
> Enterprise Rent-A-Car Phone:314-512-3355
> Network Management System Administration Fax:314-512-6002
> UNIX System Administrator Pager:314-841-7565
>
>
> ___________________________________________________
> This message is from the kde-solaris mailing list.
> Account management: http://mail.kde.org/mailman/listinfo/kde-solaris.
> Archives: http://lists.kde.org/.
> More info: http://www.kde.org/faq.html.
>