Thanks for your help.
We tried few things to give the exact reproducer. What we figured is , Issue is reproducible when application is multi threaded.
In Multi threaded application , even after exiting the thread FDs are not freed.
Please find the reproducer scripts and steps below.
File1 : Sample.pm
package sample;
use strict;
use DBI;
my $count = 0;
sub showtime () {
print "Starting loop \n";
#while ( $count < 50 ) {
$count++;
print ("Connecting to DB \n");
# Modify sid, user, password values.
my $dbh = DBI->connect("DBI:Oracle:host=localhost;port=1521;sid=
+syno",'temipsyno','temipsyno',{PrintError => 1, RaiseError => 1, ora_
+envhp => 0});
#my $cmd = "grep VmRSS /proc/$$/status";
# Check no. of fd's after connection to db.
#my $cmd = "ls -l /proc/$$/fd | grep ocius";
#print `$cmd`;
sleep(1);
print ("Disconnecting from DB \n");
$dbh->disconnect or warn "Disconnection failed: $DBI::errstr\n";
#}
print "Ending script \n";
}
1;
Source file2 : scr1
#!/usr/local/bin/perl
use threads;
use sample;
$ENV{'ORACLE_HOME'} = '/usr/opt/oracle';
sub worker() {
my $count = 0;
# Make it do some work (open and close DB 10 times).
while ( $count < 2 ) {
sample::showtime();
$count = $count + 1 ;
#my $cmd = "ls -l /proc/$$/fd | grep ocius";
#print threads -> self() -> tid() . " : " . `$cmd` ;
sleep 3
}
}
my $nthreads = 5;
for ( 1..$nthreads )
{
threads->create(\&worker);
}
foreach my $thr (threads->list() )
{
$thr->join();
}
print ("Check no. of fd's for ocius.msb using lsof -p $$. Sleeping 30s
+ \n");
print ("If no. of fd's > 0, then why there is still fd's not closed ev
+en after"
. " threads have exited \n");
sleep(30);
How to execute the script:
./scr1
Sample o/p:
Starting loop
Connecting to DB
Starting loop
Connecting to DB
Starting loop
Connecting to DB
Starting loop
Connecting to DB
Starting loop
Connecting to DB
Disconnecting from DB
Ending script
Disconnecting from DB
Ending script
Disconnecting from DB
Ending script
Disconnecting from DB
Ending script
Disconnecting from DB
Ending script
Starting loop
Connecting to DB
Starting loop
Connecting to DB
Starting loop
Connecting to DB
Starting loop
Connecting to DB
Starting loop
Connecting to DB
Disconnecting from DB
Ending script
Disconnecting from DB
Ending script
Disconnecting from DB
Ending script
Disconnecting from DB
Ending script
Disconnecting from DB
Ending script
Check no. of fd's for ocius.msb using lsof -p 9940. Sleeping 30s
If no. of fd's > 0, then why there is still fd's not closed even after threads have exited
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.