Page 1 of 1

Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-26 18:34
by stickybit
Hallo,

jeder HTTP-Aufruf liefert Folgendes:

Code: Select all

Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0
Hab inzwischen rausgefunden, dass es an Apache liegt. Wir haben momentan etwas über 1000 viruelle Hosts. Pro VirtualHost wird eine eigene access.log definiert. Offensichtlich hat das zu dem o.g. Fehler geführt. Apache Neustarten hilft nicht. Wahrscheinlich öffnet er die ganzen Log-Files. Normaler Betrieb scheitert dann.
Der Ausweg ist, das Limit von geöffneten Dateien pro Prozess hochzuschrauben. Gibt es evtl. eine Alternative seitens Apache?

Danke im Voraus!

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-26 19:01
by stickybit
danke für die Antwort.
Dass der apache logfiles wieder schliesst und "nur" die öffnet, die er aktuell braucht?
Na wäre ja denkbar.
Das ist eine Limitierung des OS. Dafür kann der Apache nichts.
Ist das eine Limitierung pro Benutzer oder pro Prozess?
Wie könnte ich den Wert am einfachsten hochschrauben?

Danke.

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-26 19:16
by stickybit
es handelt sich um Debian 4.0.
Muss ich kompilieren oder geht das auch per Config?

Danke.

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-26 20:06
by Roger Wilco
Alternative: Alle VirtualHosts in die gleiche Datei loggen lassen und (falls überhaupt erforderlich) nachträglich nach VirtualHost aufteilen.

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-26 20:31
by stickybit
Roger Wilco wrote:Alternative: Alle VirtualHosts in die gleiche Datei loggen lassen und (falls überhaupt erforderlich) nachträglich nach VirtualHost aufteilen.
Das Problem ist, die Log-Dateien sind bereits zusammengefasst.
Es sind momentan nur max. 500 Log-Files vorhanden, trotzdem greift das 1024 Limit. Ich frage mich warum?
VirtualHosts habe ich ca. 1000. Wird jede Log-Datei also u.U. zwei Mal geöffnet bzw. vom System als geöffnet gezählt?
man ulimit
ulimit -n <eine Zahl Deiner Wahl>
gilt das nicht nur für die jeweils aktuelle Shell und bleibt also für Apache ohne Wirkung?

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-26 20:42
by Roger Wilco
stickybit wrote:Wird jede Log-Datei also u.U. zwei Mal geöffnet bzw. vom System als geöffnet gezählt?
Das kannst du mit `lsof` prüfen. Außerdem sind es ja nicht nur die Logfiles, die geöffnet sind. Der Apache greift durchaus noch auf andere Dateien zu, so dass bei 1000 VirtualHosts das voreingestellte Limit 1024 Dateien schnell erreicht ist.

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-26 20:45
by stickybit
gilt das o.g. Limit pro Prozess oder pro Benutzer?

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-26 21:06
by Roger Wilco
stickybit wrote:gilt das o.g. Limit pro Prozess oder pro Benutzer?
Pro Prozess bzw. was auch immer in der /etc/limits.conf als Domäne eingetragen ist (siehe `man limits.conf` und `man bash`).

ulimit: Einstellen des Limits

Posted: 2008-08-27 10:00
by stickybit
Hallo,

bei mir öffnet der Apache sehr viele Dateien, sodass das System-Limit von 1024 pro Prozess/Benutzer überschritten wird.
Wie kann ich für Apache-Prozesse den Wert erhöhen (debian 4.0)?
Hab schon gegoogelt.
http://www.linux-community.de/Neues/story?storyid=17853
Da steht:
Damit auch Squid oder andere Programme in den Genuss des höheren Limits kommen, muss noch in der Datei /usr/include/bits/types.h der Wert von __FD_SETSIZE angepasst werden:
#define __FD_SETSIZE 4096
Dann übersetzt man die entsprechenden Programme neu.
Ist das richtig? Ich finde zwar die types.h Datei aber __FD_SETSIZE darin nicht.

Danke für jede Hilfe oder jeden Hinweis!

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-27 10:07
by Roger Wilco
matzewe01 wrote:Ich habe aber gar keine limits.conf für was gilt es denn?
limits.conf(5) wrote:limits.conf - configuration file for the pam_limits module
Der Pfad lautet /etc/security/limits.conf und nicht /etc/limits.conf, wie zuerst von mir geschrieben. In /etc gibt es dafür die /etc/limits, welche wiederum etwas ähnliches macht, nur ohne PAM-Modul.

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-27 10:14
by stickybit
kann man denn für Apache Prozesse den max. Wert der geöffneten Dateien pro Prozess erhöhen?

Re: ulimit: Einstellen des Limits

Posted: 2008-08-27 10:44
by stickybit
besteht denn die Möglichkeit nur für eine Serveranwendung das Limit zu setzen?

Re: ulimit: Einstellen des Limits

Posted: 2008-08-27 10:55
by stickybit
matzewe01 wrote:Mit Sicherheit auch.
Setzte es in dessen Umgebung.
z.B. in /etc/init.d/apache2
Sorry, das hab ich jetzt nicht ganz verstanden. Werden die /etc/init.d/* Scripts nicht vom Root ausgeführt und die sämtlichen Anweisungen würden dann nur für Root gelten?

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-27 14:09
by freddy36
Ein "ulimit -n 16383" mit ins init script vom Apache dürfte am leichtesten Abhilfe schaffen.

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-27 15:46
by Roger Wilco
Themen zusammengefügt.

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-27 18:20
by daemotron
Tja, also unter FreeBSD gäbe es dafür die Login Classes... (da lassen sich solche Limits an den User binden). Kann man unter Linux nicht ulimit umgehen und per sysctl einen entsprechenden Wert für max. File Handles pro Prozess setzen?

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-27 18:25
by Roger Wilco
jfreund wrote:Tja, also unter FreeBSD gäbe es dafür die Login Classes... (da lassen sich solche Limits an den User binden).
Schon einen Blick in /etc/limits oder /etc/security/limits.conf auf einem Linux-System geworfen? ;)

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-27 20:58
by daemotron
Sind mir durchaus bekannt, aber /etc/limits ist nicht so fein granular, und das Funktionieren der Limits in /etc/security/limits.conf hängt davon ab, dass PAM nicht umgangen wird. Über sysctl lässt sich da übrigens unter Linux nichts festlegen, habe ich grade noch mal nachgeschaut.

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-27 23:41
by freddy36
jfreund wrote:Über sysctl lässt sich da übrigens unter Linux nichts festlegen, habe ich grade noch mal nachgeschaut.
sysctl fs.file-max
/usr/linux/Documentation/filesystems/proc.txt wrote:file-nr and file-max
--------------------

The kernel allocates file handles dynamically, but doesn't free them again at
this time.

The value in file-max denotes the maximum number of file handles that the
Linux kernel will allocate. When you get a lot of error messages about running
out of file handles, you might want to raise this limit. The default value is
10% of RAM in kilobytes. To change it, just write the new number into the
file:

# cat /proc/sys/fs/file-max
4096
# echo 8192 > /proc/sys/fs/file-max
# cat /proc/sys/fs/file-max
8192


This method of revision is useful for all customizable parameters of the
kernel - simply echo the new value to the corresponding file.

Historically, the three values in file-nr denoted the number of allocated file
handles, the number of allocated but unused file handles, and the maximum
number of file handles. Linux 2.6 always reports 0 as the number of free file
handles -- this is not an error, it just means that the number of allocated
file handles exactly matches the number of used file handles.

Attempts to allocate more file descriptors than file-max are reported with
printk, look for "VFS: file-max limit <number> reached".

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-28 08:54
by Joe User
Roger Wilco wrote:
jfreund wrote:Tja, also unter FreeBSD gäbe es dafür die Login Classes... (da lassen sich solche Limits an den User binden).
Schon einen Blick in /etc/limits oder /etc/security/limits.conf auf einem Linux-System geworfen? ;)
Gelten aber nur für Logins per Shadow beziehungsweise PAM und helfen hier nicht wirklich weiter...

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-29 12:41
by stickybit
Joe User wrote:Gelten aber nur für Logins per Shadow beziehungsweise PAM und helfen hier nicht wirklich weiter...
um das Thema abzuschließen. Ich muss also ulimit -n XXX Befehl in einem der Init-Scripte aufrufen. Die Beschränkung gilt dann für alle Serverprozesse. Richtig?

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-29 13:20
by daemotron
Sollte so sein, da vom init-Skript aus gestartete Prozesse als Child des Shell-Prozesses gestartet werden, der das init-Skript abarbeitet.

Re: Warning: Unknown: failed to open stream: Too many open files in Unknown on line 0

Posted: 2008-08-29 13:24
by stickybit
jfreund wrote:Sollte so sein, da vom init-Skript aus gestartete Prozesse als Child des Shell-Prozesses gestartet werden, der das init-Skript abarbeitet.
ok, danke!