From: Jan Kratochvil Date: Wed, 25 May 2016 16:44:37 +0000 (+0200) Subject: bin: +psswap X-Git-Url: http://git.jankratochvil.net/?p=nethome.git;a=commitdiff_plain;h=3f93f2fef21736b9e9f0630bac114ce28f2e7571;hp=ef3336f2f245de6e9908d11f3285dc0965fc7167 bin: +psswap --- diff --git a/bin/psswap b/bin/psswap new file mode 100755 index 0000000..615a07b --- /dev/null +++ b/bin/psswap @@ -0,0 +1,46 @@ +#! /usr/bin/perl +use strict; +use warnings; +local *F; +my $pscmd="ps axwl"; +open F,"$pscmd|" or die "$pscmd: $!"; +my %pid; +my $rsstotal=0; +local $_; +while () { + /^(?:\S+\s+){2}(\S+)\s+(?:\S+\s+){4}(\S+)/ or die $_; + die if $pid{$1}; + $pid{$1}=$_; + $rsstotal+=$2 if $2 ne "RSS"; +} +close F or die "$pscmd: $!"; +my $head=delete $pid{"PID"} or die; +my %swap; +for my $pid (keys(%pid)) { + my $line=$pid{$pid}; + my $kb=0; + my $fn="/proc/$pid/smaps"; + if (!open F,$fn) { + warn "$fn: $line: $!" if $line!~/ $pscmd$/; + next; + } + while () { + $kb+=$1 if /^Swap:\s+(\d+) kB\n$/; + } + close F or die "$fn: $!"; + push @{$swap{$kb}},$line; +} +sub printfmt($$) { + my($kb,$line)=@_; + printf "%10s %s",$kb,$line; +} +printfmt "SWAP",$head; +my $swaptotal=0; +for my $kb (sort { $b<=>$a; } keys(%swap)) { + for my $line (@{$swap{$kb}}) { + printfmt $kb,$line; + $swaptotal+=$kb; + } +} +print "SWAP total: $swaptotal\n"; +print "RSS total: $rsstotal\n";