Can someone look at a subroutine for me? Specifically, after
this (at bottom of email) subroutine runs, it increases my
RSS by 6 megs, and shouldn't do that. (here it has indexed
133798 files)

This is the program before the checkstuff subroutine runs:
  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
16370 root      -1 -20 94732  92M  1292 S <   0.0 26.8   0:54 ldir.pl

Here it is after the checkstuff subroutine runs:
  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
16370 root       9 -20 98.5M  98M  1292 S <   0.0 28.5   1:07 ldir.pl

Here is some data about what the subroutine is doing:
        There are two main indexes for file system data I have
        in memory:

        %{$files} is a hash of hashes of hashes of
        arrays. @{ ${$files}{dirname}{basename} } is a list
        of some stat data and an md5sum. (md5,dev,ino,siz,mtime)

        %{$sums} is a hash of hashes of hashes hashes that serves
        to cross reference the md5sum to the file itself. Quite
        simply, ${$sums}{sum}{dir}{file} = 0 and then I can find
        out which files have a certain md5sum, and access their
        stat data by going to the other hash (%{$files}) which is
        indexed by dir and file.

        checkstuff does simple sanity checking by walking the hashes
        and counting elements. What is wrong with it???
        

... <snipped lots of perl code>
print "Ok, now check my mem usage!\n";
$temp=<STDIN>;
checkstuff();
print "Ok, now check my mem usage!\n";
$temp=<STDIN>;

sub checkstuff {
        my $temp=0;
        my $temp2=0;
        my $sum;
        my $ref;
        my $dir;
        my $file;
        my @files;
        my @dirs;
        my $name="checkstuff";
        foreach $sum (sort keys %{$sums}) {
                @dirs=(sort keys %{ ${$sums}{$sum} });
                foreach $dir (@dirs) {
                        @files=(keys %{ ${$sums}{$sum}{$dir} });
                        $temp += $#files+1;
                }
        }
        foreach $dir (sort keys %{$dirs}) {
                foreach $file (sort keys %{ ${$dirs}{$dir} }) {
                        $temp2++;
                }
        }
        print "\t$name -> MD5sums($temp) FileDirs($temp2)\n";
        undef $temp;
        undef $temp2;
        undef $sum;
        undef $ref;
        undef $dir;
        undef $file;
        undef @files;
        undef @dirs;
        undef $name;
        return();
}


--
Hob Goblin
[EMAIL PROTECTED]

"Look into my nipples of the future..." -Really Really Big Man

Reply via email to