#!/usr/bin/perl # # $Id$ # # meminfo.pl # TiChou # my $version = "1.1"; my $cmdname = (split('/', $0))[-1]; my $rrdlib = "/var/lib/rrd"; use Getopt::Long; use RRDs; sub usage($) { my $usage = "Usage: $cmdname [options] Options: -f, --file=FILE specify RRD file (default $rrdlib/meminfo.rrd) -h, --help display this help and exit -v, --version display version Report bugs to .\n"; if (shift) { print STDOUT $usage; exit 0; } else { print STDERR $usage; exit 1; } } sub version { print "$cmdname $version\n"; exit 0; } my $rrdfile = "$rrdlib/meminfo.rrd"; Getopt::Long::Configure ("bundling"); GetOptions("f|file=s" => \$rrdfile, "h|help" => \&usage, "v|version" => \&version) or &usage(0); if (not -f $rrdfile) { RRDs::create $rrdfile, qw(DS:totalram:GAUGE:600:0:U DS:freeram:GAUGE:600:0:U DS:sharedram:GAUGE:600:0:U DS:bufferram:GAUGE:600:0:U DS:pagesram:GAUGE:600:0:U DS:totalswp:GAUGE:600:0:U DS:freeswp:GAUGE:600:0:U DS:pagesswp:GAUGE:600:0:U DS:activepages:GAUGE:600:0:U DS:inactivepages:GAUGE:600:0:U RRA:AVERAGE:0.5:1:288 RRA:AVERAGE:0.5:6:336 RRA:AVERAGE:0.5:24:360 RRA:AVERAGE:0.5:288:365 RRA:MIN:0.5:1:288 RRA:MIN:0.5:6:336 RRA:MIN:0.5:24:360 RRA:MIN:0.5:288:365 RRA:MAX:0.5:1:288 RRA:MAX:0.5:6:336 RRA:MAX:0.5:24:360 RRA:MAX:0.5:288:365); my $error = RRDs::error; die "$0: $error\n" if $error; } my ($totalram,$freeram,$sharedram,$bufferram,$pagesram,$totalswp,$freeswp,$pagesswp,$activepages,$inactivepages) = ("U") x 10; open(MEM, "/proc/meminfo"); while () { /^Mem:\s+(\d+)\s+\d+\s+(\d+)\s+(\d+)\s+(\d+)\s+\d+$/ && (($totalram,$freeram,$sharedram,$bufferram) = ($1,$2,$3,$4)); /^Cached:\s+(\d+) kB$/ && ($pagesram = $1*1024); /^Swap:\s+(\d+)\s+\d+\s+(\d+)$/ && (($totalswp,$freeswp) = ($1,$2)); /^SwapCached:\s+(\d+) kB$/ && ($pagesswp = $1*1024); /^Active:\s+(\d+) kB$/ && ($activepages = $1*1024); /^Inactive:\s+(\d+) kB$/ && ($inactivepages = $1*1024); /^Inact_(?!target)\w+:\s+(\d+) kB$/ && ($inactivepages += $1*1024); }; close(MEM); RRDs::update $rrdfile, "N:$totalram:$freeram:$sharedram:$bufferram:$pagesram:$totalswp:$freeswp:$pagesswp:$activepages:$inactivepages"; my $error = RRDs::error; die "$0: $error\n" if $error;