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

Apache, Lighttpd, nginx, Cherokee
stickybit
Posts: 59
Joined: 2007-08-16 09:39

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

Post by stickybit » 2008-08-26 18:34

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!

stickybit
Posts: 59
Joined: 2007-08-16 09:39

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

Post by stickybit » 2008-08-26 19:01

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.

stickybit
Posts: 59
Joined: 2007-08-16 09:39

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

Post by stickybit » 2008-08-26 19:16

es handelt sich um Debian 4.0.
Muss ich kompilieren oder geht das auch per Config?

Danke.

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

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

Post by Roger Wilco » 2008-08-26 20:06

Alternative: Alle VirtualHosts in die gleiche Datei loggen lassen und (falls überhaupt erforderlich) nachträglich nach VirtualHost aufteilen.

stickybit
Posts: 59
Joined: 2007-08-16 09:39

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

Post by stickybit » 2008-08-26 20:31

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?

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

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

Post by Roger Wilco » 2008-08-26 20:42

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.

stickybit
Posts: 59
Joined: 2007-08-16 09:39

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

Post by stickybit » 2008-08-26 20:45

gilt das o.g. Limit pro Prozess oder pro Benutzer?

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

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

Post by Roger Wilco » 2008-08-26 21:06

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`).

stickybit
Posts: 59
Joined: 2007-08-16 09:39

ulimit: Einstellen des Limits

Post by stickybit » 2008-08-27 10:00

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!

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

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

Post by Roger Wilco » 2008-08-27 10:07

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.

stickybit
Posts: 59
Joined: 2007-08-16 09:39

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

Post by stickybit » 2008-08-27 10:14

kann man denn für Apache Prozesse den max. Wert der geöffneten Dateien pro Prozess erhöhen?

stickybit
Posts: 59
Joined: 2007-08-16 09:39

Re: ulimit: Einstellen des Limits

Post by stickybit » 2008-08-27 10:44

besteht denn die Möglichkeit nur für eine Serveranwendung das Limit zu setzen?

stickybit
Posts: 59
Joined: 2007-08-16 09:39

Re: ulimit: Einstellen des Limits

Post by stickybit » 2008-08-27 10:55

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?

freddy36
Posts: 273
Joined: 2008-03-20 17:31

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

Post by freddy36 » 2008-08-27 14:09

Ein "ulimit -n 16383" mit ins init script vom Apache dürfte am leichtesten Abhilfe schaffen.

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

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

Post by Roger Wilco » 2008-08-27 15:46

Themen zusammengefügt.

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

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

Post by daemotron » 2008-08-27 18:20

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?

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

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

Post by Roger Wilco » 2008-08-27 18:25

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? ;)

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

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

Post by daemotron » 2008-08-27 20:58

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.

freddy36
Posts: 273
Joined: 2008-03-20 17:31

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

Post by freddy36 » 2008-08-27 23:41

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".

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

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

Post by Joe User » 2008-08-28 08:54

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...
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

stickybit
Posts: 59
Joined: 2007-08-16 09:39

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

Post by stickybit » 2008-08-29 12:41

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?

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

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

Post by daemotron » 2008-08-29 13:20

Sollte so sein, da vom init-Skript aus gestartete Prozesse als Child des Shell-Prozesses gestartet werden, der das init-Skript abarbeitet.

stickybit
Posts: 59
Joined: 2007-08-16 09:39

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

Post by stickybit » 2008-08-29 13:24

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!