Am Freitag, den 20.04.2007, 09:25 -0700 schrieb Philip M. Gollucci: > > I have to maintain a multithreaded (150+) C++ application (running as > > 64Bit App on Solaris 10, SPARC, SunCC) which uses embedded perl to allow > > for easy data modification (utf-8 encoded strings) in certain places. > > This does work in general, but every now and then the application > > crashes although the same perl code has been run for a few days. > > I only briefly read this, but you're not hitting a system limit of some > kind are you ? Max open files, sockets, processes ? > > sockstat, systat, fstat, lsof ... etc ?
The proc has a limit of 4096 file handles and I have never seen it come even close to that limit. Inside the perl scripts I do not open any files, databases handles or the like (neither reading nor writing). The server has 16GB of real memory and I have never seen it run out of memory. The data exchange with the scripts is done via the stack, as seen in the initial post. > Are you sure everything is cleaning up after itself correctly and > completely ? I see quite a number of "Scalars leaked" message on STDERR but have never been able to track that down. The scripts are fairly simple so I´m quite sure there are no leftovers (also the interpreter is cloned, used and thrown away - there should be nothing left?!) The only thing I didn´t mention so far is, that I remember seeing output like this sometimes before the app crashed: -- snip -- Use of uninitialized value in pattern match (m//) at /tools/lib/perl5/5.8.8/utf8_heavy.pl line 211. Use of uninitialized value in scalar assignment at /tools/lib/perl5/5.8.8/utf8_heavy.pl line 227. Use of uninitialized value in pattern match (m//) at /tools/lib/perl5/5.8.8/utf8_heavy.pl line 228. -- / snip -- The text above is from today. This is my utf8_heavy.pl: -- snip -- 188 my $extras; 189 my $bits = 0; 190 191 my $ORIG = $list; 192 if ($list) { 193 my @tmp = split(/^/m, $list); 194 my %seen; 195 no warnings; 196 $extras = join '', grep /^[^0-9a-fA-F]/, @tmp; 197 $list = join '', 198 map { $_->[1] } 199 sort { $a->[0] <=> $b->[0] } 200 map { /^([0-9a-fA-F]+)/; [ hex($1), $_ ] } 201 grep { /^([0-9a-fA-F]+)/ and not $seen{$1}++ } @tmp; # XXX doesn't do ranges right 202 } 203 204 if ($none) { 205 my $hextra = sprintf "%04x", $none + 1; 206 $list =~ s/\tXXXX$/\t$hextra/mg; 207 } 208 209 if ($minbits < 32) { 210 my $top = 0; 211 while ($list =~ /^([0-9a-fA-F]+)(?:[\t]([0-9a-fA-F]+)?)(?:[ \t]([0-9a-fA-F]+))?/mg) { 212 my $min = hex $1; 213 my $max = defined $2 ? hex $2 : $min; 214 my $val = defined $3 ? hex $3 : 0; 215 $val += $max - $min if defined $3; 216 $top = $val if $val > $top; 217 } 218 $bits = 219 $top > 0xffff ? 32 : 220 $top > 0xff ? 16 : 221 $top > 1 ? 8 : 1 222 } 223 $bits = $minbits if $bits < $minbits; 224 225 my @extras; 226 for my $x ($extras) { 227 pos $x = 0; 228 while ($x =~ /^([^0-9a-fA-F\n])(.*)/mg) { -- / snip -- I don`t understand how the values can be undefined but maybe my perl is even worse than my english. The scripts should always get some data to work on. I´m not sure though, that it may never be invalid utf-8 - but since the data is parsed from and to XML I should have seen log entries on that (unless the scripts always die on invalid utf-8...) If there is anything else I could check, please tell me. Many thanks heiko --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]