[Bioperl-l] StandAloneFasta and Too many open files

Chris Fields cjfields at illinois.edu
Tue May 11 03:04:12 UTC 2010


On May 10, 2010, at 9:03 PM, Dimitar Kenanov wrote:

> Hi guys,
> yesterday i got the following error:
> 
>    'Too many open files at /usr/lib64/perl5/site_perl/5.10.0/Bio/Tools/Run/Alignment/StandAloneFasta.pm line 380'
> 
> from the following code:
> ------------
>    my $ssout="my_seq_out.txt";
>    print "SS:$tquery:\n:$tseq:\n";
>    my @sargs=(
>        'q' => '',
>        'E' => '1',
>        'w' => '100',
>        'O' => "$ssout",
>        'program' => "ssearch36",
>        );
>    my $fac_ss=Bio::Tools::Run::Alignment::StandAloneFasta->new(@sargs);
>    $fac_ss->library($tmpseq);
>    my @sreport=$fac_ss->run($tqtmp);
> 
>  foreach my $sr (@sreport){
>      while(my $result=$sr->next_result){
>          while(my $hit=$result->next_hit){
>              while(my $hsp=$hit->next_hsp){
>                  my $iden=$hsp->frac_identical;
>                  $rv3=$iden;
> #               print "IDEN:$iden:$rv1\n";
>              }
>          }
>      }
>  }
> --------------------
> I am using that code over several thousands of HSPs for which i get the sequence and then 'ssearch36' with it against another sequence. I was digging around the module StandAloneFasta but couldnt get where the problem is. There should be somewhere many opened filehandles but do not know where. I checked the module but couldnt find such filehandles. May be the problem is in the base modules.
> I also checked and my script for left open filehandles and i have not. I found only that i can actually close SeqIO streams with '$stream->close' which i didnt see on the web documentation. So something positive out of this :) So i closed all my SeqIO streams and i still had the same problem.
> Next i commented out the above code and rewrote my script into the following:
> --------------
>    my $ssout="my_seq_out.txt";
>    my @sargs=("ssearch36 -q -E 1 -d 1 $tqtmp $tmpseq > $ssout");
>    system(@sargs) == 0 or die "system @sargs failed: $!";
> 
>    my $sreport=Bio::SearchIO->new(-file => $ssout, -format => 'fasta');
>    while(my $result=$sreport->next_result){
> #    print Dumper($result);
>        while(my $hit=$result->next_hit){
>            while(my $hsp=$hit->next_hsp){
> 
>            my $iden=$hsp->frac_identical;
>            $rv3=$iden;
> #            print "IDEN:$iden:$rv1\n";
>            }
>        }
>    }
> ---------------
> Fortunately this code overcame the error message with too many filehandles. So the problem was indeed coming from the module or the modules behind it.
> 
> I have also read that one can change the number of how many files can be opened on the system but i didnt want to mess with that for now because i do not know what could be the implications of that.
> 
> Ok that is it. I just wanted to inform about my experience and to report the problem.
> 
> Cheers
> Dimitar


Seems this is hitting the system ulimit somehow, but it's not immediately apparent how that's happening unless you are caching the IO objects somehow.  Can you file this as a bug, maybe with a fuller test script?  Might give us something to check against.

chris





More information about the Bioperl-l mailing list