Imported Upstream version 1.12

This commit is contained in:
Mario Fetka
2017-10-31 14:38:28 +01:00
commit ae1fc8494f
157 changed files with 35016 additions and 0 deletions

158
examples/jsr77.pl Executable file
View File

@@ -0,0 +1,158 @@
#!/usr/bin/perl
use JMX::Jmx4Perl;
use strict;
use Data::Dumper;
use Getopt::Std;
my %opts;
getopts('s',\%opts);
my $url = $ARGV[0] || die "No url given\n";
my $jmx = JMX::Jmx4Perl->new(url => $url,verbose => 0);
my $MODULE_HANDLER = init_handler($jmx);
my %VISITED = ();
my $product = $jmx->product;
print "Product: ",$product->name," ",$product->version,"\n";
print "JSR77 : ",$product->jsr77 ? "Yes" : "No","\n\n";
my $domains = $jmx->search("*:j2eeType=J2EEDomain,*");
$domains = [ "(none)" ] unless $domains;
# Special fix for geronimo which seems to have a problem with properly spelling
# the domain name
#push @$domains,"Geronimo:j2eeType=J2EEDomain,name=Geronimo" if grep { /^geronimo:/ } @$domains;
for my $d (@{$domains || []}) {
my $dn = $d eq "(none)" ? "*" : _print(1,$d,"Domain");
my $servers = $jmx->search("$dn:j2eeType=J2EEServer,*");
if (!$servers && $d eq "(none)") {
# That's probably not a real jsr77 container
# We are looking up all J2EEObject on our own without server and domain
my $objects = [ grep { /j2eeType/ } @{$jmx->search("*:*")} ];
print_modules(1,$objects);
} elsif (!$servers) {
print " == No servers defined for domain $dn ==\n";
} else {
for my $s (@{$servers || []}) {
my $sn = _print(2,$s,"Server");
for my $o (qw(deployedObjects resources javaVMs)) {
my $objects = $jmx->get_attribute($s,$o);
print_modules(3,$objects);
}
}
}
print "\n";
}
# Special JBoss handling, since it seems than deployed WARs (WebModules)
# don't appear below a server but stand on their own (despite the rules
# layed out in JSR77)
if ($product->id eq "jboss" || $product->id eq "weblogic") {
my $web_modules = $jmx->search("*:j2eeType=WebModule,*");
if ($web_modules) {
print "\n=============================================\nJBoss WebModules:\n";
my $new = [ grep { !$VISITED{$_} } @$web_modules ];
print_modules(1,$new);
}
}
sub init_handler {
my $jmx = shift;
return {
"J2EEApplication" => "modules",
"AppClientModule" => 0,
"ResourceAdapterModule" => "resourceAdapters",
"WebModule" => "servlets",
"Servlet" => 0,
"EJBModule" => "ejbs",
"MessageDrivenBean" => 0,
"EntityBean" => 0,
"StatelessSessionBean" => 0,
"StatefulSessionBean" => 0,
"JCAResource" => "connectionFactories",
"JCAConnectionFactory" => "managedConnectionFactory",
"JCAManagedConnectionFactory" => 0,
"JavaMailResource" => 0,
"JDBCResource" => "jdbcDataSources",
"JDBCDataSource" => "jdbcDriver",
"JDBCDriver" => 0,
"JMSResource" => 0,
"JNDIResource" => 0,
"JTAResource" => 0,
"RMI_IIOPResource" => 0,
"URLResource" => 0,
"JVM" => sub {
my ($l,$mod) = @_;
print " ",
join(", ",map { $jmx->get_attribute($mod,$_) } qw(javaVendor javaVersion node)),"\n";
},
# JBoss specific:
"ServiceModule" => 0,
"MBean" => 0
};
}
sub print_modules {
my ($l,$objects) = @_;
for my $k (sort keys %$MODULE_HANDLER) {
my @mods = grep { $_ =~ /j2eeType=$k/ } @$objects;
if (@mods) {
my $handler = $MODULE_HANDLER->{$k};
for my $mod (@mods) {
_print($l,$mod);
if (ref($handler) eq "CODE") {
$handler->($l,$mod);
} elsif ($handler && !ref($handler)) {
my $modules = $jmx->get_attribute($mod,$handler);
if ($modules) {
$modules = ref($modules) eq "ARRAY" ? $modules : [ $modules ];
# Fix for Jonas 4.1.2 with jetty, which includes the
# WebModule itself in the list of contained Servlets
$modules = [ grep { $_ !~ /j2eeType=$k/} @$modules ];
print_modules($l+1,$modules) if scalar(@$modules);
}
}
}
}
}
}
sub _print {
my ($i,$s,$t) = @_;
$VISITED{$s} = $s;
my $n = extract_name($s);
unless ($t) {
$t = $1 if $s =~ /j2eeType=(\w+)/;
}
my $can_stat = check_for_statistics($s);
print " " x $i,$t,": ",$n,($can_stat ? " [S] " : ""),"\n";
print " " x $i," " x length($t)," ",$s,"\n";
if ($opts{s} && $can_stat) {
eval {
my $ret = $jmx->get_attribute($s,"stats");
print Dumper($ret);
};
}
return $n;
}
sub check_for_statistics {
my $mbean = shift;
my $ret;
eval {
$ret = $jmx->get_attribute($mbean,"statisticsProvider");
};
return $@ ? undef : lc($ret) eq "true";
}
sub extract_name {
my $s = shift;
$s =~ /.*:.*name=([^,]+)/;
return $1;
}

11
examples/memory.pl Normal file
View File

@@ -0,0 +1,11 @@
#!/usr/bin/perl
use JMX::Jmx4Perl;
use strict;
my $jmx = new JMX::Jmx4Perl(url => "http://localhost:8080/jolokia");
my $memory = $jmx->get_attribute("java.lang:type=Memory","HeapMemoryUsage");
my ($used,$max) = ($memory->{used},$memory->{max});
if ($memory->{used} / $memory->{max} > 0.9) {
print "Memory exceeds 90% (used: $used / max: $max = ",int($used * 100 / $max),"%)\n";
system("/etc/init.d/tomcat restart");
sleep(120);
}

13
examples/memory.sh Normal file
View File

@@ -0,0 +1,13 @@
#!/bin/bash
base_url="http://localhost:9090/jolokia"
memory_url="${base_url}/read/java.lang:type=Memory/HeapMemoryUsage"
used=`wget -q -O - "${memory_url}/used" | sed 's/^.*"value":"\([0-9]*\)".*$/\1/'`
max=`wget -q -O - "${memory_url}/max" | sed 's/^.*"value":"\([0-9]*\)".*$/\1/'`
usage=$((${used}*100/${max}))
if [ $usage -gt 5 ]; then
echo "Memory exceeds 80% (used: $used / max: $max = ${usage}\%)";
exit 1;
else
exit 0;
fi

31
examples/remote.pl Normal file
View File

@@ -0,0 +1,31 @@
#!/usr/bin/perl
use JMX::Jmx4Perl;
use JMX::Jmx4Perl::Request;
use JMX::Jmx4Perl::Alias;
use Data::Dumper;
use Time::HiRes qw(gettimeofday tv_interval);
my $jmx = new JMX::Jmx4Perl(url => "http://localhost:8888/jolokia-proxy",
target => {
url => "service:jmx:rmi:///jndi/rmi://bhut:9999/jmxrmi",
env => {
user => "monitorRole",
password => "consol",
}
}
);
my $req1 = new JMX::Jmx4Perl::Request(READ,{
mbean => "java.lang:type=Memory",
attribute => "HeapMemoryUsage",
}
);
my $req2 = new JMX::Jmx4Perl::Request(LIST);
my $req3 = new JMX::Jmx4Perl::Request(READ,{
mbean => "jboss.system:type=ServerInfo",
attribute => "HostAddress"
}
);
my $t0 = [gettimeofday];
my @resp = $jmx->request($req3);
print "Duration: ",tv_interval($t0,[gettimeofday]),"\n";
print Dumper(@resp);

102
examples/threadDump.pl Executable file
View File

@@ -0,0 +1,102 @@
#!/usr/bin/perl
use Getopt::Long;
use JMX::Jmx4Perl;
use Data::Dumper;
use strict;
use warnings;
=head1 NAME
threadDump.pl - Print a thread dump of an JEE Server
=head1 SYNOPSIS
threadDumpl.pl -f org.jmx4perl http://localhost:8080/j4p
http-0.0.0.0-8080-1 (RUNNABLE):
....
sun.management.ThreadImpl.dumpThreads0(ThreadImpl.java:unknown)
org.jmx4perl.handler.ExecHandler.doHandleRequest(ExecHandler.java:77)
org.jmx4perl.handler.RequestHandler.handleRequest(RequestHandler.java:89)
org.jmx4perl.MBeanServerHandler.dispatchRequest(MBeanServerHandler.java:73)
org.jmx4perl.AgentServlet.callRequestHandler(AgentServlet.java:205)
org.jmx4perl.AgentServlet.handle(AgentServlet.java:152)
org.jmx4perl.AgentServlet.doGet(AgentServlet.java:129)
....
=head1 DESCRIPTION
For JEE Server running with Java 6, this simple script prints out a thread
dump, possibly filtered by package name. This is done by executing the MBean
C<java.lang:type=Threading>'s operation C<dumpAllThreads>.
=cut
my %opts = ();
my $result = GetOptions(\%opts,
"user|u=s","password|p=s",
"proxy=s",
"proxy-user=s","proxy-password=s",
"filter|f=s",
"verbose|v!",
"help|h!" => sub { Getopt::Long::HelpMessage() }
);
my $url = $ARGV[0] || die "No URL to j4p agent given\n";
my $jmx = new JMX::Jmx4Perl(url => $url,user => $opts{user},password => $opts{password},
proxy => $opts{proxy}, proxy_user => $opts{"proxy-user"});
my $dump;
eval {
$dump = $jmx->execute("java.lang:type=Threading","dumpAllThreads","false","false");
};
die "Cannot execute thread dump. Remember, $0 works only with Java >= 1.6\n$@\n" if $@;
my @filters = split ",",$opts{filter} if $opts{filter};
for my $thread (@$dump) {
print "-" x 75,"\n" if print_thread($thread);;
}
sub print_thread {
my $thread = shift;
my $st = get_stacktrace($thread->{stackTrace});
if ($st) {
print $thread->{threadName}," (",$thread->{threadState},"):\n";
print $st;
return 1;
} else {
return undef;
}
}
sub get_stacktrace {
my $trace = shift;
my $ret = "";
my $found = 0;
my $flag = 1;
my $last_line;
for my $l (@$trace) {
my $class = $l->{className};
if (!@filters || grep { $class =~ /^\Q$_\E/ } @filters) {
$ret .= $last_line if ($last_line && !$found);
$ret .= format_stack_line($l);
$found = 1;
$flag = 1;
} elsif ($flag) {
$flag = 0;
$ret .= " ....\n";
$last_line = format_stack_line($l);
}
}
return $found ? $ret : undef;
}
sub format_stack_line {
my $l = shift;
my $ret = " ".$l->{className}.".".$l->{methodName}."(".$l->{fileName}.":";
$ret .= $l->{lineNumber} > 0 ? $l->{lineNumber} : "unknown";
$ret .= ")\n";
return $ret;
}