Created
February 9, 2016 16:58
-
-
Save bpaquet/fba6d3f7629105b3ce6c to your computer and use it in GitHub Desktop.
Monitoring jvm from collectd
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
use Getopt::Long; | |
use strict; | |
use warnings; | |
my $vm_name = ""; | |
my $interval = 10; | |
GetOptions ("vm_name=s" => \$vm_name, "interval=i" => \$interval) or die 'Syntax error'; | |
die 'Syntax error' unless $vm_name; | |
my $me = $$; | |
`ps axu | grep jvm-stats.pl | grep $vm_name | grep -v axu | grep -v $me | awk '{print \$2}' | xargs kill -TERM 2>&1 > /dev/null`; | |
`ps axu | grep jps | grep $vm_name | grep -v axu | awk '{print \$2}' | xargs kill -TERM 2>&1 > /dev/null`; | |
my $pid = 0; | |
$SIG{TERM} = sub { | |
if ($pid) { | |
`kill -TERM $pid`; | |
} | |
exit 0; | |
}; | |
sub trim { | |
my $s = shift; | |
$s =~ s/^\s+|\s+$//g; | |
return $s; | |
}; | |
my $host = trim(`hostname`); | |
my $name = lc($vm_name); | |
while(1) { | |
my $process = trim(`jps | grep $vm_name | awk '{print \$1}'` || ''); | |
if (length($process) > 0) { | |
`ps axu | grep jstat | grep $process | grep -v axu | awk '{print \$2}' | xargs kill -TERM 2>&1 > /dev/null`; | |
$pid = open(OUT, "jstat -gc $process ${interval}s |"); | |
my $first_line = <OUT>; | |
while (my $line = <OUT>) { | |
my $time = trim(`date +%s`); | |
# S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT | |
my ($s0c, $s1c, $s0u, $s1u, $ec, $eu, $oc, $ou, $pc, $pu, $ygc, $ygct, $fgc, $fgct, $gct) = map { trim($_) } split(/\s+/, trim($line)); | |
$fgc = int($fgc); | |
$fgct = int($fgct); | |
$ygc = int($ygc); | |
$ygct = int($ygct); | |
$fgct = $fgct * 1000; | |
$ygct = $ygct * 1000; | |
$pc = $pc * 1000; | |
$pu = $pu * 1000; | |
$oc = $oc * 1000; | |
$ou = $ou * 1000; | |
$ec = $ec * 1000; | |
$eu = $eu * 1000; | |
$s0c = $s0c * 1000; | |
$s0u = $s0u * 1000; | |
$s1c = $s1c * 1000; | |
$s1u = $s1u * 1000; | |
print "PUTVAL $host/jvm/counter-$name.gc $time:$fgc\n"; | |
print "PUTVAL $host/jvm/counter-$name.gc_time $time:$fgct\n"; | |
print "PUTVAL $host/jvm/counter-$name.ygc $time:$ygc\n"; | |
print "PUTVAL $host/jvm/counter-$name.ygc_time $time:$ygct\n"; | |
print "PUTVAL $host/jvm/gauge-$name.perm_capacity interval=$interval N:$pc\n"; | |
print "PUTVAL $host/jvm/gauge-$name.perm_size interval=$interval N:$pu\n"; | |
print "PUTVAL $host/jvm/gauge-$name.old_capacity interval=$interval N:$oc\n"; | |
print "PUTVAL $host/jvm/gauge-$name.old_size interval=$interval N:$ou\n"; | |
print "PUTVAL $host/jvm/gauge-$name.eden_capacity interval=$interval N:$ec\n"; | |
print "PUTVAL $host/jvm/gauge-$name.eden_size interval=$interval N:$eu\n"; | |
print "PUTVAL $host/jvm/gauge-$name.survivor0_capacity interval=$interval N:$s0c\n"; | |
print "PUTVAL $host/jvm/gauge-$name.survivor0_size interval=$interval N:$s0u\n"; | |
print "PUTVAL $host/jvm/gauge-$name.survivor1_capacity interval=$interval N:$s1c\n"; | |
print "PUTVAL $host/jvm/gauge-$name.survivor1_size interval=$interval N:$s1u\n"; | |
} | |
} | |
sleep($interval); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment