Potrzebuję otworzyć ponad 10 000 plików w skrypcie Perla, więc poprosiłem administratora systemu o zmianę limitu na moim koncie na 14 000. ulimit -a
pokazuje teraz te ustawienia:Problemy z otwarciem ponad 10 000 plików w Perlu
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
open files (-n) 14000
pipe size (512 bytes, -p) 10
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 29995
virtual memory (kbytes, -v) unlimited
Po zmianie wpadłem testowy Perl program, który otwiera/256 tworzy pliki i zamyka 256 uchwyty plików na końcu skryptu. Kiedy tworzy 253 plików, program umiera mówiąc zbyt wiele otwartych plików. Nie rozumiem, dlaczego dostaję tego błędu.
Pracuję na platformie Solaris 10. To jest mój kod
my @list;
my $filename = "test";
for ($i = 256; $i >= 0; $i--) {
print "$i " . "\n";
$filename = "test" . "$i";
if (open my $in, ">", ${filename}) {
push @list, $in;
print $in $filename . "\n";
}
else {
warn "Could not open file '$filename'. $!";
die;
}
}
for ($i = 256; $i >= 0; $i--) {
my $retVal = pop @list;
print $retVal . "\n";
close($retVal);
}
Czy masz inny proces z uruchomionymi plikami? –
'for ($ i = 256; $ i> = 0; $ i -)' tworzy pliki * 257 *. Jakie wyniki uzyskujesz, gdy to się nie powiedzie? – Borodin