Re: Merkwürdiges geht vor in Version 9..

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Thu, 19 Jan 2012 12:34:30 +0100 (CET)

Heino Tiedemann <rotkap(at)gmx.de> wrote:
> Verschiedene Anwenderprogramme (Bildbetrachter Geegie, Newsreader
> Emacs/Gnus und Audioplayer Audacious) meldeten:
>
> ,----
> | To many open files in System
> `----

Als erstes würde ich die Ausgabe von »pstat -T« prüfen.
Das sieht bei mir hier gerade so aus:

290/12328 files
500M/2048M swap space

Also 290 offene Descriptoren, weit vom Maximum entfernt.
Normalerweise kann ich mir nicht vorstellen, dass auf
einem Single-User-Desktop-PC die Anzahl der offenen
Descriptoren in den fünfstelligen Bereich kommt. Da
hätte ich den Verdacht, dass irgendwas Amok läuft.

(Übrigens, nicht nur offene Dateien belegen Descriptoren,
sondern auch Netzwerk-Sockets, Pipes und ein paar andere
Dinge.)

Folgendes Kommando zeigt, welches Programm wieviele
Descriptoren belegt, sortiert nach deren Anzahl:

$ sockstat | awk '{print $2}' | sort | uniq -c | sort -n

Da könnte man vielleicht schon erkennen, ob etwas aus
dem Ruder läuft.

(Kleiner Tip in die Runde: Da eine Funktion zum Sortieren
und Zählen öfters mal nützlich sein kann, habe ich einen
Alias sucs="sort | uniq -c | sort -n".)

> Ich wollte einen USB Stick unmounten - wie immer, und bekam immer die
> Meldung: "Device is Busy". Ganz merkwürdig, ich hatte alle anwendungen
> zu, die evtl auf den Stick zugreifen hätten können.

Ich glaube, dass die beiden Probleme nichts miteinander zu
tun haben.

> Lässt FreeBSD 9 die Datein nicht so schell los?

Das hat nichts mit FreeBSD 9 zu tun (es sei denn, es ist
ein Bug, aber dann hätten das sicherich schon andere Nutzer
bemerkt).

Den Tip, lsof zu verwenden, haben ja schon einige gegeben.
Damit kann man recht schnell nachgucken, welche Prozesse
noch Dateien auf einem bestimmten Dateisystem verwenden.

Es gibt aber noch andere Fälle, wo "device busy" gemeldet
wird. Beispielsweise, wenn sich in dem Dateisystem ein
Mountpoint befindet. Diesen zeigen lsof oder fstat nicht
an, weil es kein Userland-Descriptor ist. Man sieht ihn
nur bei mount(8) oder df(1).

Typisches Beispiel (ist mir auch schon passiert): Man
mountet ein Image, in dem sich ein FreeBSD-chroot oder
-jail befinden, und mountet dann darin ein DEVFS, um das
chroot oder jail starten zu können. Wenn man fertig ist
und versucht, das Image zu umounten, gibt es "device busy",
auch wenn keinerlei Dateien mehr darin geöffnet sind;
lsof oder fstat zeigen nichts an. Dass da aber noch ein
DEVFS drin schlummert, dass man zuerst umounten musst, kann
man schon mal vergessen ...

(Das war jetzt nur ein Beispiel; ich nehme an, dass es bei
Dir etwas Anderes ist.)

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart
FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd
"... there are two ways of constructing a software design:  One way
is to make it so simple that there are _obviously_ no deficiencies and
the other way is to make it so complicated that there are no _obvious_
deficiencies."        -- C.A.R. Hoare, ACM Turing Award Lecture, 1980
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Thu 19 Jan 2012 - 12:35:08 CET

search this site