Open source software security

Monitoring Sun One Web Server Active Threads

30 November -0001
I recently ran I recently ran into a situation where I had to monitor the number of active threads on a Sun One Web Server. We were having a problem with garbage collection taking up a lot of resources and causing a spike in active threads on the server. While solutions like MRTG could provide some very useful information, it required constantly scanning over the graphs. We wanted a solution that would monitor SNMP reports in the same way as MRTG, but that would analyze results and send emails out if there was a spike in active threads (as determined by comparing the difference between idle threads and total thread count). Although I investigated several native reporting options, include perfDump and stats-xml, I decided that utilizing the existing SNMP statistics would have the smallest overall load impact. The perl script used for task is listed below:
#! /usr/bin/perl
use strict;
use Net::SNMP;
use Net::SMTP;
my ($session, $error) = Net::SNMP->session(
-hostname  => shift || 'your.full.host.name',
-community => shift || 'yourCommunity',
-port      => shift || 161
);
if (!defined($session)) {
printf("ERROR: %s.\n", $error);
exit 1;
}
#iwsProcessThreadIdle 
my $idleThreads = '1.3.6.1.4.1.1450.1.60.3.1.4.1.1';
my $result = $session->get_request(
-varbindlist => [$idleThreads]
);
if (!defined($result)) {
printf("ERROR1: %s.\n", $session->error);
$session->close;
exit 1;
}
#debug:
#printf("Idle threads for host '%s' is %s\n",
#   $session->hostname, $result->{$idleThreads}
#);
my $idle = $result->{$idleThreads};
#iwsProcessThreadCount 
my $threadCount = '1.3.6.1.4.1.1450.1.60.3.1.3.1.1';
my $result = $session->get_request(
-varbindlist => [$threadCount]
);
if (!defined($result)) {
printf("ERROR1: %s.\n", $session->error);
$session->close;
exit 1;
}
#debug:
#printf("Thread Count for host '%s' is %s\n",
#   $session->hostname, $result->{$threadCount}
#);
my $descrepency = $result->{$threadCount} - $idle;
#printf("Active is %s\n", $descrepency);
$session->close;
if ($descrepency > 35) {
    # Connect to the server
    my $ServerName = 'yourSMTPserver';
    my $smtp = Net::SMTP->new($ServerName) ;
    die "Couldn't connect to server" unless $smtp ;
    my $MailFrom = "username\@domain.tld" ;
    my @MailTo = ("user1\@domain.tld","user2\@domain.tld");
    $smtp->mail( $MailFrom ) ;
    $smtp->to( @MailTo ) ;
    # Send the message
    $smtp->data("Active thread cnt is $descrepency\n\n") ;
    # Send the termination string
    $smtp->dataend() ;
    $smtp->quit() ;
}

   exit 0;