Univention Bugzilla – Bug 17705
Anzahl der maximal offenen Filedeskriptoren für den slapd erhöhen
Last modified: 2010-08-31 13:21:03 CEST
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.
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?
(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).
Das sollte in Verbindung mit Bug #12928 angegangen werden.
Da slapd als root ausgeführt wird, soll das erst einmal im init-Skript von slapd umgesetzt werden. (Siehe Bug #18500)
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}).
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.
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".