Zu viele offene Dateien

Zu viele offene Dateien

Wenn ich Lutris und dann den LOL-Client öffne, passiert das. Und das Spiel funktioniert nie richtig. Ich habe viele Dinge ausprobiert, kann aber das Limit für geöffnete Dateien nie ändern. Wie kann ich das beheben?

Waiting on children  
Waiting on children  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
esync: write: Bad file descriptor  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
esync: write: Bad file descriptor  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  

außerdem gibt es hier meine Limits-Infos

~$ ulimit -a  
core file size          (blocks, -c) 0  
data seg size           (kbytes, -d) unlimited  
scheduling priority             (-e) 0  
file size               (blocks, -f) unlimited  
pending signals                 (-i) 15106  
max locked memory       (kbytes, -l) 16384  
max memory size         (kbytes, -m) unlimited  
open files                      (-n) 1024  
pipe size            (512 bytes, -p) 8  
POSIX message queues     (bytes, -q) 819200  
real-time priority              (-r) 0  
stack size              (kbytes, -s) 8192  
cpu time               (seconds, -t) unlimited  
max user processes              (-u) 15106  
virtual memory          (kbytes, -v) unlimited  
file locks                      (-x) unlimited  

Antwort1

Wenn die Fehlermeldung „Zu viele offene Dateien“ in die Protokolle geschrieben wird, bedeutet dies, dass alle verfügbaren Dateihandles für den Prozess verwendet wurden (dazu gehören auch Sockets).

In den meisten Fällen ist dies darauf zurückzuführen, dass Dateihandles von einem Teil der Anwendung weitergegeben werden. ulimitist ein Befehl in Unix/Linux, mit dem Sie Systemgrenzen für alle Eigenschaften festlegen können. In Ihrem Fall müssen Sie die maximale Anzahl geöffneter Dateien auf einen hohen Wert erhöhen (z. B. 1000000):

ulimit -n 1000000

oder

sysctl -w fs.file-max=1000000

und /etc/security/limits.confoder /etc/sysctl.confändern:

fs.file-max = 1000000

Um festzustellen, ob die Anzahl der geöffneten Dateien im Laufe der Zeit zunimmt, geben Sie lsofregelmäßig einen Bericht über die geöffneten Dateien anhand einer PID aus. Beispiel:

lsof -p [PID] -r [interval in seconds, 1800 for 30 minutes] > lsof.out

Dies ist insbesondere dann nützlich, wenn Sie keinen Zugriff auf den lsofBefehl haben:

ls -al /proc/PID/fd

Richtlinien zum Festlegen von ulimits

Antwort2

Laufen

less /proc/PID/limits

um das tatsächliche Soft-Limit der maximal geöffneten Dateien zu überprüfen. Wenn Sie ulimits einrichten, die tatsächliche Zahl aber immer noch niedrig ist, überprüfen Sie, wie Sie den Prozess starten. Beispielsweise übernimmt systemd die ulimits, und Sie sollten explizite Einstellungen verwenden, besser auf Prozessebene, um sicherzustellen, dass Ihr Programm die benötigten Laufzeitlimits erhält.

Antwort3

Ich denke, es gibt verschiedene Gründe, warum dies passieren kann:

  1. Systemweites Limit (Ausführen, cat /proc/sys/fs/file-maxum das Limit anzuzeigen, bei mir ist es 9223372036854775807)
  2. Max. Benutzerinstanzen (Ausführen cat /proc/sys/fs/inotify/max_user_instances: war früher 128)
  3. Hartes Benutzerlimit ( Ausführen ulimit -nH:)1048576
  4. Weiches Benutzerlimit (Ausführen ulimit -nS: war früher 1024)

1. Systemweites Limit

Die systemweite Regel kann angepasst werden durch

fs.file-max = 9223372036854775807

in /etc/sysctl.conf. Dieser Wert war für mich kein Problem.

2. Maximale Benutzerinstanzen

Für mich war dieser Wert zu niedrig. Um ihn zu beheben, fügen Sie diese Zeile erneut hinzu oder bearbeiten Sie sie in/etc/sysctl.conf

fs.inotify.max_user_instances = 1024

3. & 4. Hartes oder weiches Benutzerlimit

Mein Soft-User-Limit war auch zu niedrig. Um das zu beheben, öffnen Sie /etc/security/limits.conf(als Root) und fügen Sie diese Zeile hinzu:

<username>             soft    nofile 100000

(Ersetzen Sie es <username>durch Ihren Benutzernamen oder *für alle Benutzer)

Das harte Benutzerlimit kann durch Ersetzen softvon hardin der obigen Zeile festgelegt werden. Natürlich können Sie mehrere Regeln für harte und weiche Limits oder verschiedene Benutzer haben.

Dinge in die Tat umsetzen

Vielleicht reicht es aus, sich abzumelden und erneut anzumelden, damit die Änderungen übernommen werden, aber ich habe das System sicherheitshalber neu gestartet.

verwandte Informationen