In der Schulkonsole sind "Meine Daten" nicht erreichbar

Hallo Zusammen!

Heute hatte ich eine Meldung, dass „Meine Daten“ über die Schulkonsole (linuxmuster-webui7 Version 7.2.83) nicht erreichbar sind.

Fehlermeldung:

Serverfehler 
Server error occured. This is likely a bug.

Request
POST /api/lmn/smbclient/list

Type
ValueError

Message
filedescriptor out of range in select()

Traceback
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/dist-packages/aj/api/endpoint.py", line 77, in wrapper
    result = fx(self, context, *args, **kwargs)
  File "/usr/lib/linuxmuster-webui/plugins/lmn_smbclient/views/lmnsmbclient.py", line 96, in handle_api_smb_list
    return self._smb_list_path(path)
  File "/usr/lib/linuxmuster-webui/plugins/lmn_smbclient/views/lmnsmbclient.py", line 138, in _smb_list_path
    for item in smbclient.scandir(path):
  File "/usr/local/lib/python3.10/dist-packages/smbclient/_os.py", line 544, in scandir
    with SMBDirectoryIO(path, share_access="rwd", **kwargs) as fd:
  File "/usr/local/lib/python3.10/dist-packages/smbclient/_io.py", line 362, in __init__
    tree, fd_path = get_smb_tree(path, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/smbclient/_pool.py", line 304, in get_smb_tree
    session = register_session(
  File "/usr/local/lib/python3.10/dist-packages/smbclient/_pool.py", line 408, in register_session
    connection.connect(timeout=connection_timeout)
  File "/usr/local/lib/python3.10/dist-packages/smbprotocol/connection.py", line 888, in connect
    smb_response = self._send_smb2_negotiate(dialect, timeout, enc_algos, sign_algos)
  File "/usr/local/lib/python3.10/dist-packages/smbprotocol/connection.py", line 1611, in _send_smb2_negotiate
    request = self.send(neg_req)
  File "/usr/local/lib/python3.10/dist-packages/smbprotocol/connection.py", line 975, in send
    return self._send(
  File "/usr/local/lib/python3.10/dist-packages/smbprotocol/connection.py", line 1299, in _send
    self._check_worker_running()
  File "/usr/local/lib/python3.10/dist-packages/smbprotocol/connection.py", line 1184, in _check_worker_running
    raise self._t_exc
  File "/usr/local/lib/python3.10/dist-packages/smbprotocol/connection.py", line 1312, in _process_message_thread
    b_msg = self.transport.recv(self._receive_timeout)
  File "/usr/local/lib/python3.10/dist-packages/smbprotocol/transport.py", line 115, in recv
    b_packet_size, timeout = self._recv(4, timeout)
  File "/usr/local/lib/python3.10/dist-packages/smbprotocol/transport.py", line 137, in _recv
    read = select.select([self._sock], [], [], max(timeout, 1))[0]
  File "/usr/local/lib/python3.10/dist-packages/gevent/select.py", line 181, in select
    sel_results = _original_select(rlist, wlist, xlist, 0)
ValueError: filedescriptor out of range in select()

Eine Analyse von /var/log/ajenti/ajenti.log ergab den Fehler
2025-10-29 11:15:44,623 ERROR : Unhandled endpoint error at /api/lmn/smbclient/list
der seit 2025-10-25 immer mal wieder aufgetreten ist.

Vorher gab es den Eintrag:
2025-10-25 13:53:38,291 ERROR : Unhandled endpoint error at /api/lmn/smbclient/refresh_krbcc

Die Ursache des Problems kenne ich nicht, aber ein Neustart der Schulkonsole hat das Problem zumindest behoben:
# systemctl restart linuxmuster-webui.service

Für alle, die vielleicht auf das gleiche Problem stoßen.

Gruß - Rainer

Hallo Rainer,

Danke. Die Anzahl von file descriptor, die man auf einem Server öffnen kann ist begrenzt. Anscheinend sind einige nicht sauber geschlossen im smbclient, und wenn man einmal nah an die Grenze ist, wird den Fehler ständig stoßen.
Beim Restart werden alle geöffnete file descriptors geschlossen, das war die einfachste Lösung.

Gruß

Arnaud

Hallo,
wir haben seit diesem Jahr viele iPads am Laufen. Dort verwenden wir die Linuxmuster-App um auf die Daten vom Server zuzugreifen. Der oben bechriebene Fehler ist mir (und vielen anderen an der Schule) aufgefallen. Gut, dass ich jetzt die Erklärung dazu habe. Aber wie gehen wir damit am Besten um? Einmal am Tag neu starten? Alle Stunde neu starten? Was passiert dann mit bestehenden Verbindungen?

Viele Grüße
Helge

…oder anders gefragt: Gibt es eine Möglichkeit, die Anzahl der benutzten File descriptors abzufragen und mit dem eingestellten Wert zu vergleichen?

Was ist eigentlich der eingestellte Wert? Wird der bei 1000 Usern schon erreicht?
Viele Grüße
Helge

Hallo Helge,

Das ist leider ein übliches Problem mit ulimit, und das ist schon seit 2 Jahren offen: filedescriptor out of range in select() · Issue #219 · jborean93/smbprotocol · GitHub

Man kann die Webui manchmal neu starten, um die File descriptors zu bereinigen.

Eine andere Lösung wäre ulimit für den Prozess in /lib/systemd/system/linuxmuster-webui.service zu erhöhen:

[Unit]
Description=linuxmuster.net WebUI
After=network.target

[Service]
Type=forking
LimitNOFILE=65536
...

dann:

systemctl daemon-reload
systemctl restart linuxmuster-webui.service

Wenn man den PID davon hat, kann man es überprüfen:

$ cat /proc/PID/limits
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    0                    bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             63504                63504                processes 
Max open files            65536                65536                files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       63504                63504                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us 

Gruß

Arnaud

Wir haben deinen Tipp heute morgen umgesetzt. Vorhin war die Schulkonsole wahnsinnig langsam. Der Speicherverbrauch war bei 5.1BG. Das auch noch nach einem Neustart:

root@server:~# systemctl restart linuxmuster-webui.service
root@server:~# systemctl status linuxmuster-webui.service
● linuxmuster-webui.service - linuxmuster.net WebUI
     Loaded: loaded (/lib/systemd/system/linuxmuster-webui.service; enabled; ve>
     Active: active (running) since Thu 2025-11-06 13:58:49 CET; 3min 43s ago
    Process: 329089 ExecStart=/usr/bin/python3 /usr/local/bin/ajenti-panel -d ->
   Main PID: 329093 (python3)
      Tasks: 3 (limit: 14211)
     Memory: 5.1G
        CPU: 1min 1.950s
     CGroup: /system.slice/linuxmuster-webui.service
             ├─329093 /usr/bin/python3 /usr/local/bin/ajenti-panel -d --stock-p>
             ├─329101 "/usr/local/bin/ajenti-panel worker [restricted session]">
             └─329211 "/usr/local/bin/ajenti-panel worker [session 3]" "" "" "">

Erst nachdem ich das LimitNOFILE reduziert hatte, waren es wieder 159MB. Ich habe es wieder auf 65536 gesetzt und warte mal ab.
Kann es sein, dass der Speicher erst nach dem

systemctl daemon-reload

wieder freigegeben wird?

Viele Grüße
Helge

Hallo Helge,

5G memory sind ja groß, habt ihr viele Benuztzer oder viele Dateien in die Schule ?

Von was ich weiß, daemon-reload wird einfach nur die verschiedene systemd Konfigurationen neu lesen. Nach einem Restart kann es aber sein, dass das Leeren von Memory ein bisschen dauert.

Gruß

Arnaud

Hallo Arnaud,

wir nutzen das H-Laufwerk, d.h. allein ich habe da einige GB liegen.

Kann es sein, dass bei webdav versucht wird möglichst alle Dateien zu lesen/scannen und ich mit dem Filelimit nur das Problem verschiebe, also 65000 filelinks geöffnet werden?

Lieben Gruß
Helge