• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

mandb öffnet zu viele Dateien

Hatte/habe hier auf einem SLES8 ein Problem mit mandb, das ja üblicherweise in der daily.cron aufgerufen wird.
Es wurde folgende Fehlermeldung perl Mail geschickt:
Code:
Subject:cronjob@lhg24tmp - daily – FAILURE
running daily cronjob scripts

SCRIPT: clean_catman, OK.
SCRIPT: clean_core, OK.
SCRIPT: do_mandb, OK.
SCRIPT: output (stdout && stderr) follows

There seem to be trouble with mandb.

please run /usr/bin/mandb an check the output...
SCRIPT: do_mandb
------- END OF OUTPUT


SCRIPT: logrotate exited with RETURNCODE = 1.
SCRIPT: output (stdout && stderr) follows

error: error reading top line of /var/lib/logrotate.status
SCRIPT: logrotate
------- END OF OUTPUT


SCRIPT: medusa.cron, OK.
SCRIPT: suse.de-backup-rc.config, OK.
SCRIPT: suse.de-backup-rpmdb, OK.
SCRIPT: suse.de-check-battery, OK.
SCRIPT: suse.de-clean-tmp, OK.
SCRIPT: suse.de-clean-vi, OK.
SCRIPT: suse.de-cron-local, OK.
SCRIPT: updatedb, OK.

Irgendwas mit mandb funktioniert nicht.
Habe dann also root und man User mandb –cd in der Konsole aufgerufen und es kamen tatsächlich jede Menge Fehler in der Art: :

Code:
ult_src: File /usr/share/man/man1/ci.1.gz in mantree /usr/share/man
++priv_drop_count = 1
--priv_drop_count = 0
mandb: can't open /usr/share/man/man1/ci.1.gz: Too many open files
mandb: warning: /usr/share/man/man1/ci.1.gz: bad symlink or ROFF `.so' request

Zu viele offene Dateien? Das kann eigentlich nicht sein:
Ein cat /proc/sys/fs/file-max gibt 104032 an.
Warum sollte mandb so viele Dateien öffnen? Vielleicht nur falsche Fehlermeldung?

Habe deshalb das ganze noch mal mit strace begutachtet:

Code:
open("/usr/share/man/man1/setmetamode.1.gz", O_RDONLY) = 1023
fstat64(1023, {st_mode=S_IFREG|0644, st_size=558, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40596000
read(1023, "\37\213\10\10/\\\255=\2\3setmetamode.1\0eS]o\3320\24}"..., 16384) = 558
read(1023, "", 12288)                   = 0
_llseek(1023, 0, [558], SEEK_CUR)       = 0
read(1023, "", 16384)                   = 0
lseek(4, 64418, SEEK_SET)               = 64418
write(4, "setmetamode\0", 12)           = 12
write(4, "1\t1\t1034771503\tA\t-\t-\tgz\tdefine t"..., 62) = 62
lseek(4, 135168, SEEK_SET)              = 135168
write(4, "\4\0\0\0\"\0\0\0\336_\0\0\"\0\0\0007e\0\0\24\4\0\0\354"..., 4096) = 4096
lseek(4, 64418, SEEK_SET)               = 64418
.
.
.
lstat64("/usr/share/man/man1/ci.1.gz", {st_mode=S_IFREG|0644, st_size=7743, ...}) = 0
stat64("/usr/share/man/man1/ci.1.gz", {st_mode=S_IFREG|0644, st_size=7743, ...}) = 0
open("/usr/share/man/man1/ci.1.gz", O_RDONLY) = -1 EMFILE (Too many open files)
write(2, "mandb: ", 7)                  = 7
write(2, "can\'t open /usr/share/man/man1/c"..., 38) = 38
write(2, ": Too many open files", 21)   = 21
write(2, "\n", 1)                       = 1
write(2, "mandb: ", 7)                  = 7
write(2, "warning: /usr/share/man/man1/ci."..., 71) = 71
write(2, "\n", 1)                       = 1



Es ist tatsächlich so. mandb schließt nicht immer alle Dateien manchmal schon und nach 1023 ist Schluss.

Habe dann mit ulimit -n 8128 einfach mal den bash Wert höher gesetzt und schon funktioniert der Durchlauf von mandb.
In einer neuen Bash steht der Wert übrigens auf 7168.
Nun meine abschließenden Fragen:
Warum schließt mandb nicht nach jeder geöffneten Datei?
Warum sind bei ca. 1023 (10 Bit) geöffneten Dateien Schluss?
Warum hatte dann ulimit einen Einfluss darauf?
Und am wichtigsten, wie kriege ich das jetzt am sinnvollsten im Cron unter, der auch ein YOU übersteht?

Q&D Lösung ist ja im Skript do_mandb einfach ulimit –u zu setzten.
Ach, jetzt habe ich es selbst gefunden oder?
Einfach in die Datei /etc/sysconfig/cron ulimit -n 8128 reinsetzten.
 
Das Problem ist doch noch nicht beseitig.
Heute wieder das selbe Problem mit cron.
Auch ulimit -u egal hilft nicht mehr.

Zudem bekomme ich nun noch den Fehler
Code:
gdbm fatal: read error
am Ende beim Ausführen von mandb -c

Nun habe ich keine Idee mehr :(

Wenn man in google groups nach
gdbm fatal: read error
sucht, erhält man 20 Fragen ohne Antworten, bestenfalls die Antwort, dass man in google groups suchen soll, da ja dort mind. 20 Treffer sind :?

PS: Wie blöd von mir, diese Umfrage eingebaut zu haben. Das stört doch irgendwie ....
 
Na ja, wenn du deinen Beitrag mit dem du die Umfrage gemacht hast mit "edit" nochmal aufmachst, könntest du sie löschen. (Guck mal unten, da ist ein Kästchen "Umfrage löschen")

Wenn du möchtest, kann ich es auch tun.
 
Lösch doch mal bitte. Dieses Kästchen scheint nicht mehr aufzutauchen, sobald jemand abgestimmt hat. :(
 
Oben