Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement