Imported Upstream version 1.12
This commit is contained in:
158
examples/jsr77.pl
Executable file
158
examples/jsr77.pl
Executable 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
11
examples/memory.pl
Normal 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
13
examples/memory.sh
Normal 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
31
examples/remote.pl
Normal 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
102
examples/threadDump.pl
Executable 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;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user