Bug 17705 - Anzahl der maximal offenen Filedeskriptoren für den slapd erhöhen
Anzahl der maximal offenen Filedeskriptoren für den slapd erhöhen
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: LDAP
UCS 2.3
Other Linux
: P5 normal (vote)
: UCS 2.4
Assigned To: Janek Walkenhorst
Felix Botner
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2010-02-19 09:38 CET by Moritz Muehlenhoff
Modified: 2010-08-31 13:21 CEST (History)
1 user (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Moritz Muehlenhoff univentionstaff 2010-02-19 09:38:09 CET
Bis UCS 2.2 verwaltete der slapd die eingehenden Verbindungen durch select(), das Größe der Select-Matrix war dabei durch ein Makro auf 1024 limitiert und statisch. Seit UCS 2.3 verwenden der slapd aus Lenny epoll(), das event-basiert arbeitet und diese Beschränkung nicht mehr hat. 

Bei einem Kunden trat das Problem auf, das der slapd keine Verbindungen mehr annahm und im syslog Fehlermeldungen der Art

warning: cannot open /etc/hosts.allow: Too many open files

auftraten. Das liegt daran, dass das ulimit für von einem Prozess geöffnete FDs auf einem System standardmässig auf 1024 beschränkt ist. (Abfragbar mit "ulimit -n")

Bei dem Kunden haben wir an den Anfang des Init-Skripts ein "ulimit -n 4096" gesetzt, das wird dann auch auf alle Kind-Prozesse vererbt.

Die Limits eines laufenden Prozesses können mit /proc/$PID/limits abgefragt werden.
Comment 1 Stefan Gohmann univentionstaff 2010-02-19 10:19:17 CET
Wir sollten überlegen, ob wir das per Default ins init-Skript übernehmen. Oder macht es mehr Sinn das generisch zu erhöhen? limits.conf?

Wie ist da die Debian Policy?
Comment 2 Moritz Muehlenhoff univentionstaff 2010-02-19 10:51:22 CET
(In reply to comment #1)
> Wir sollten überlegen, ob wir das per Default ins init-Skript übernehmen. Oder
> macht es mehr Sinn das generisch zu erhöhen? limits.conf?
> 
> Wie ist da die Debian Policy?

Auf einem Standard-sid ist "ulimit -n" auf 1024. 

Vielleicht könnten wir die Einstellung für die maximalen FDs in das UCR-Template für limits.conf integrieren und darauf im Performance Guide verweisen und das nur für den slapd spezifisch erhöhen, da der slapd aufgrund der idle-timeout-Problematik etwas besonders ist, bei anderen Server-Diensten sollten diese Zahlen ja im Allgemeinen nicht erreicht werden.

Die Anzahl der maximal auf einem System möglichen FDs steht in /proc/sys/fs/file-max (IIRC abhängig vom verfügbaren RAM und nicht statisch).
Comment 3 Stefan Gohmann univentionstaff 2010-03-12 07:50:45 CET
Das sollte in Verbindung mit Bug #12928 angegangen werden.
Comment 4 Janek Walkenhorst univentionstaff 2010-05-27 13:55:23 CEST
Da slapd als root ausgeführt wird, soll das erst einmal im init-Skript von slapd umgesetzt werden. (Siehe Bug #18500)
Comment 5 Janek Walkenhorst univentionstaff 2010-05-27 14:59:03 CEST
univention-ldap (7.0.1-1) unstable; urgency=low

  * enable max file handles to be configured via UCR (Bug #17705)


\item Die maximale Anzahl der gleichzeitig offenen Dateideskriptoren des slapd
 kann nun durch die \ucsUCRV{ldap/maxopenfiles} konfiguriert werden.
 Der Standardwert wurde von \ucsName{1024} auf \ucsName{4096}
 erhöht (\ucsBug{17705}).
Comment 6 Felix Botner univentionstaff 2010-08-10 16:14:59 CEST
Die Änderung am Template für das init Skript ist vorhanden:

...
    log_action_msg "Starting ldap server(s): slapd"
        (                                          
@!@                                                
if configRegistry.get('ldap/maxopenfiles'):        
        print '\t\tulimit -n %s' % configRegistry['ldap/maxopenfiles']
@!@             start-stop-daemon --start --quiet --pidfile "$pidfile" \
                        --exec $DAEMON -- -h "ldap:/// ldapi:/// ldaps:///"
        )
...


Nach der Installation ist die Variable gesetzt (mit ? im postinst):

-> ucr get ldap/maxopenfiles
4096

Der slapd hat diese Einstellungen auch bekommen:

-> more /proc/$(pidof slapd)/limits | grep "Max open files"
Max open files            4096                 4096                 files

Ändern kann man den Wert auch:

-> ucr set ldap/maxopenfiles="2048"
-> /etc/init.d/slapd restart
-> more /proc/$(pidof slapd)/limits | grep "Max open files"
Max open files            2048                 2048                 files


Changelog Eintrag ist vorhanden.
Comment 7 Stefan Gohmann univentionstaff 2010-08-31 13:21:03 CEST
UCS 2.4 wurde veröffentlicht. Sollte der hier beschriebene Bug mit einer
neueren Version von UCS erneut auftreten, so sollte der Bug dupliziert werden:
"Clone This Bug".