Wie legen Sie eine Globale nofile begrenzen, um zu vermeiden, "many open files" - Fehler?
Habe ich eine websocket-service. es ist strage, die Fehlermeldung:"too many open files", aber ich habe das system konfigurieren:
/etc/security/limits.conf
* soft nofile 65000
* hard nofile 65000
/etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024 65000
ulimit -n
//output 6500
Also ich denke mein system konfigurieren, dass es stimmt.
Mein service ist verwalten von Vorgesetzten, ist es möglich, supervisor Grenzen?
check-Prozess starten Sie, indem Betreuer:
cat /proc/815/limits
Max open files 1024 4096 files
check Prozess-Handbuch start:
cat /proc/900/limits
Max open files 65000 65000 files
Dem Grund verwendet, supervisor verwalten serivce. wenn ich neu starten supervisor und neu starten-Kind-Prozess, ist es "max open files" ok(65000), aber falsch(1024) beim reboot system supervisor automatisch starten.
Werden kann, supervisor-start level ist zu hoch und das system konfigurieren funktioniert nicht, wenn supervisor starten?
edit:
system: ubuntu 12.04 64bit
Es ist nicht Vorgesetzter problem, alle Prozess-auto-start nach Neustart des Systems nicht verwenden, system konfigurieren(max open files=1024), aber Neustart ist es wieder ok.
update
Vielleicht das problem ist:
- https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/938669
- http://bryanmarty.com/blog/2012/02/10/setting-nofile-limit-upstart/
- Erhöhung der maximal offenen Dateien für Ubuntu/Upstart (initctl)
Nun stellt sich die Frage, wie eine Globale nofile limit, weil ich möchte nicht nofile limit in jeder upstart-script, welches ich brauche.
- versuchen
fs.file-max
im/etc/sysctl.conf
wenn Sie nicht wollen, zu setzenlimit nofile
in jeder upstart-Skript. - Verwandte: Zu viele offene Dateien - wie um den Schuldigen zu finden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Behoben dieses Problem, indem die Grenzen für alle Benutzer in der Datei :
Starten Sie DEN SERVER neu, nachdem Sie die Einstellung der Grenzwerte.
SEHR WICHTIG:
Die
/etc/security/limits.d/
Ordner enthält die vom Benutzer auf spezifische Grenzen beschränkt. In meinem Fall hadoop 2 (cloudera) Verwandte Grenzen. Diese Benutzer-spezifischen Grenzen würde überschreiben die globalen Grenzen, so dass, wenn Sie Ihre Grenzen nicht angewandt werden, sicher sein, zu überprüfen, die user bestimmte Grenzen in den Ordner/etc/security/limits.d/
und in der Datei/etc/security/limits.conf
.ACHTUNG:
Festlegen der Benutzer-spezifische Grenzen ist der Weg zu gehen in allen Fällen. Festlegen der globalen (*) Begrenzung vermieden werden sollte. In meinem Fall war es eine isolierte Umgebung und brauchte nur zu beseitigen, Datei-Grenzen-Problem von meinem experiment.
Hoffe, das spart jemand ein paar Haare - so wie ich verbrachte zu viel Zeit in mein Haar ziehen chunk für chunk!
Ich hatte das gleiche problem. Obwohl
ulimit -Sn
zeigt meine neue Grenze, läuftsupervisorctl restart all
undcat
ing die proc-Dateien nicht zeigen, die neue Grenzen.Das problem ist, dass
supervisord
noch den ursprünglichen Grenzen. Daher werden alle Kind-Prozesse erzeugt es immer noch die ursprünglichen Grenzen.So, die Lösung ist, um zu töten und neu starten
supervisord
.Versuchen, zu Bearbeiten /etc/sysctl.conf und passen Sie die Grenzen weltweit
Zum Beispiel:
Kräfte der Grenze zu 100000 Dateien.
Anfügen:
Speichern und schließen Sie die Datei. Nutzer müssen sich Abmelden und wieder neu anmelden, um änderungen wirksam zu machen oder einfach nur geben Sie den folgenden Befehl ein:
Jeder müde Googler: Sie könnten auf der Suche nach der
minfds
Einstellung in der supervisor config. Diese Einstellung scheint für beide der supervisord-Prozess als auch die Kinder. Ich hatte eine Reihe von anderen Strategien, einschließlich starten einer shell-Skript, das die Grenzen vor der Ausführung des eigentlichen Programms, aber das war das einzige, was funktionierte.Finden Sie Ihr limit mit:
oder
sysctl -a | grep file
ändern Sie in /proc/sys/fs/file-max-Datei oder mit:
luqmaan Antwort wurde das ticket für mich, bis auf eine kleine Einschränkung: die
*
wildcard gilt nicht für root in Ubuntu (wie beschrieben inlimits.conf
's Kommentare).Müssen Sie explizit den Grenzwert für root, wenn
supervisord
gestartet wird, als root-Benutzer aus:vi /etc/security/limits.conf
Können Sie einen Grenzwert für Service auf diese Weise:
hinzufügen:
LimitNOFILE=65536
in:
/etc/systemd/system/{NameofService}.service
Ich denke, das hat nichts zu tun mit geöffneten Dateien(Es ist einfach falsch Fehlermeldung). Jeder port einer Anwendung im Einsatz.
1. Versuchen Sie die Prozess-ID mit dem Befehl
2. Kill den Prozess (z.B. 8572) mit dem Befehl
3. Starten Sie Ihre Anwendung erneut.