Wir haben kürzlich begonnen, unsere Anwendung zu testen und festgestellt, dass die Dateideskriptoren nach etwa 24 Stunden aufgebraucht sind.
Wir führen RHEL 5 auf einem Dell 1955 aus:
CPU: 2 x Dual Core 2,66 GHz 4 MB 5150/1333 FSB RAM: 8 GB RAM Festplatte: 2 x 160 GB 2,5-Zoll-SATA-Festplatten
Ich habe das Dateideskriptor-Limit überprüft und es wurde auf 1024 festgelegt. Angesichts der Tatsache, dass unsere Anwendung möglicherweise über 1000 eingehende Verbindungen sowie 1000 ausgehende Verbindungen verfügt, scheint dies recht niedrig zu sein. Ganz zu schweigen von den tatsächlichen Dateien, die geöffnet werden müssen.
Mein erster Gedanke war, den Parameter ulimit -n nur um einige Zehnerpotenzen zu erhöhen und dann den Test erneut auszuführen, aber ich wollte mögliche Konsequenzen einer zu hohen Einstellung dieser Variablen kennen.
Gibt es Best Practices, um dies zu ändern, außer herauszufinden, wie viele Dateideskriptoren unsere Software theoretisch öffnen kann?
ulimit
Limit ist nicht pro Benutzer, sondern pro Prozess! Siehe unix.stackexchange.com/questions/55319/… Und diefs.file-max
Einstellung gilt für den gesamten Server (also alle Prozesse zusammen).Man konnte immer nur
Während der Situation mit hoher Auslastung, um zu sehen, wie viele Dateideskriptoren verwendet werden.
Was das Maximum betrifft - es hängt nur davon ab, was Sie tun.
quelle
8288 0 793377
!Wenn es sich bei den Dateideskriptoren um TCP-Sockets usw. handelt, besteht die Gefahr, dass Sie viel Speicher für die Socket-Puffer und andere Kernel-Objekte verbrauchen. Dieser Speicher kann nicht ausgetauscht werden.
Ansonsten aber nein, prinzipiell sollte es kein Problem geben. Konsultieren Sie die Kernel-Dokumentation, um herauszufinden, wie viel Kernel-Speicher verwendet wird, und / oder testen Sie ihn.
Wir betreiben Datenbankserver mit offenen ~ 10k-Dateideskriptoren (meistens auf echten Disc-Dateien) ohne größere Probleme, aber sie sind 64-Bit-Server und haben eine Menge RAM.
Die ulimit-Einstellung ist pro Prozess festgelegt, es gibt jedoch auch eine systemweite Beschränkung (32 KB, denke ich standardmäßig).
quelle
Ich persönlich kenne keine Best Practices. Es ist etwas subjektiv, abhängig von der Systemfunktion.
Denken Sie daran, dass es sich bei 1024, die Sie sehen, um ein Benutzerlimit und nicht um ein systemweites Limit handelt. Überlegen Sie, wie viele Anwendungen Sie auf diesem System ausführen. Ist das der einzige? Tut der Benutzer, der diese Anwendung ausführt, noch etwas? (IE haben Sie Menschen mit diesem Konto zum Anmelden und Ausführen von Skripten, die möglicherweise weglaufen?)
Da die Box nur diese eine Anwendung ausführt und das Konto, auf dem diese Anwendung ausgeführt wird, nur für diesen Zweck ist, sehe ich keinen Nachteil darin, Ihr Limit zu erhöhen, wie Sie vorschlagen. Wenn es sich um ein internes Entwicklerteam handelt, würde ich sie um ihre Meinung bitten. Wenn es von einem Drittanbieter stammt, gelten möglicherweise spezielle Anforderungen oder Empfehlungen.
quelle
Dies scheint mir eine der Fragen zu sein, die am besten mit "In einer Entwicklungsumgebung testen" beantwortet werden können. Ich erinnere mich, dass Sun vor Jahren nervös geworden ist, als Sie sich damit angelegt haben, aber nicht so nervös. Das Limit war zu der Zeit auch 1024, also bin ich ein wenig überrascht zu sehen, dass es jetzt dasselbe für Linux ist, es scheint, als sollte es höher sein.
Ich fand den folgenden Link informativ, als ich nach Antworten auf Ihre Frage suchte: http://www.netadmintools.com/art295.html
Und dies auch: https://stackoverflow.com/questions/1212925/on-linux-set-maximum-open-files-to-unlimited-possible
quelle