1#!/usr/bin/env perl 2# $Id: calc_mem_use.pl,v 1.3 2015/04/21 13:20:29 kostik Exp kostik $ 3 4use strict; 5use warnings; 6require Data::Dumper; 7 8my $in_z = 0; 9my $in_m = 0; 10my $total_z = 0; 11my $total_zf = 0; 12my $total_m = 0; 13 14while (<>) { 15 chomp; 16 if (/Type\s+InUse\s+MemUse\s+HighUse\s+Requests\s+Size\(s\)/) { 17 $in_z = 0; 18 $in_m = 1; 19 next; 20 } 21 if (/ITEM\s+SIZE\s+LIMIT\s+USED\s+FREE\s+REQ\s+FAIL\s+SLEEP/) { 22 $in_z = 1; 23 $in_m = 0; 24 next; 25 } 26 if ($in_z) { 27 (my @fields) = split /:|,/; 28#print Data::Dumper::Dumper(\@fields); 29 next unless ($#fields >= 7); 30 my $size = $fields[1]; 31 my $used = $fields[3]; 32 my $free = $fields[4]; 33 $total_z += int($size) * int($used); 34 $total_zf += int($size) * int($free); 35 next; 36 } 37 if ($in_m) { 38 my $line = $_; 39 while (1) { 40 $line =~ s/^\s+//; 41 last unless ($line =~ s/^[a-zA-Z][a-zA-Z0-9\.\-_]*//); 42 } 43 my @fields; 44 @fields = split(/\s+/, $line); 45 my $memuse_s = $fields[1]; 46 my $memuse; 47 if ($memuse_s =~ s/K$//) { 48 $memuse = int($memuse_s) * 1024; 49 } elsif ($memuse_s =~ s/M$//) { 50 $memuse = int($memuse_s) * 1024 * 1024 ; 51 } else { 52 $memuse = int($memuse_s); 53 } 54 $total_m += $memuse; 55 next; 56 } 57} 58 59printf "Zones: %dK ZoneFree: %dK Malloc: %dK Total: %dK\n", 60 $total_z / 1024, $total_zf / 1024, $total_m / 1024, 61 ($total_z + $total_zf + $total_m) / 1024; 62