[Pkg-openldap-devel] Bug#660917: fileno ulimit regression: slapd rejects connections approaching 1024 simultaneous connections
Chris Hiestand
chiestand at salk.edu
Wed Feb 22 20:48:15 UTC 2012
Package: slapd
Version: 2.4.23-7.2
Severity: normal
Tags: patch
I believe in previous versions of slapd there was a line in /etc/init.d/slapd
setting the ulimit -n higher. However this is not present in the current version.
The original bug was reported in #378261. I am re-using the perl script in that bug report
to reproduce the problem.
A vanilla squeeze install of slapd (amd64) will max out before 1024 connections,
and the nofiles limit is 1024 (verified in /proc/$pid/limits)
The syslog errors are:
Feb 21 09:13:49 test slapd[3194]: warning: cannot open /etc/hosts.allow: Too many open files
Feb 21 09:13:49 test slapd[3194]: warning: cannot open /etc/hosts.deny: Too many open files
Feb 21 09:13:49 test slapd[3194]: warning: cannot open /etc/hosts.allow: Too many open files
Feb 21 09:13:49 test slapd[3194]: warning: cannot open /etc/hosts.deny: Too many open files
...
As in the previous bug report (378261) I tried recompiling without libwrap, and can still
reproduce the problem, though the error message changes slightly.
Proposed patches are inline below. Varying PAM stacks might effect setting the ulimit,
so I thought it was important to add a check and warn if the ulimit cannot be set.
With these patches in place, I can no longer reproduce the problem up until ~8192 connections.
Relatedly I was curious what the ceiling was, I am guessing it is whenever you run out of one of:
A. free tcp ports
B. free memory
In simple connection-only (no-load) testing I can get to ~28000 connections before my client
runs out of tcp ports to test with, and my VM server with 756MB of RAM runs out of memory.
This suggests 8192 is a conservative default value.
--- slapd.default 2012-02-22 11:29:01.000000000 -0800
+++ slapd.default.new 2012-02-22 11:28:43.000000000 -0800
@@ -43,3 +43,7 @@
# Additional options to pass to slapd
SLAPD_OPTIONS=""
+
+# The nofile user limit: should be larger than the maximum number of
+# simultaneous connections.
+SLAPD_NOFILES=8192
--- slapd.init 2012-02-17 10:58:42.000000000 -0800
+++ slapd.init.new 2012-02-22 11:37:48.000000000 -0800
@@ -57,6 +57,11 @@
SLAPD_OPTIONS="-F $SLAPD_CONF $SLAPD_OPTIONS"
fi
+# Set the nofiles limit to a reasonable value if not set
+if [ -z "$SLAPD_NOFILES" ]; then
+ SLAPD_NOFILES=8192
+fi
+
# Find out the name of slapd's pid file
if [ -z "$SLAPD_PIDFILE" ]; then
# If using old one-file configuration scheme
@@ -132,6 +137,11 @@
# Start the slapd daemon and capture the error message if any to
# $reason.
start_slapd() {
+ ulimit -Hn $SLAPD_NOFILES
+ ulimit -Sn $SLAPD_NOFILES
+ if [ "`ulimit -n`" -ne "$SLAPD_NOFILES" ]; then
+ log_warning_msg "Could not set ulimit, slapd may prematurely reject connections under load"
+ fi
if [ -z "$SLAPD_SERVICES" ]; then
reason="`start-stop-daemon --start --quiet --oknodo \
--pidfile "$SLAPD_PIDFILE" \
-- System Information:
Debian Release: 6.0.4
APT prefers stable
APT policy: (900, 'stable')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.32-5-amd64 (SMP w/12 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages slapd depends on:
ii adduser 3.112+nmu2 add and remove users and groups
ii coreutils 8.5-1 GNU core utilities
ii debconf [debconf-2.0] 1.5.36.1 Debian configuration management sy
ii libc6 2.11.3-2 Embedded GNU C Library: Shared lib
ii libdb4.8 4.8.30-2 Berkeley v4.8 Database Libraries [
ii libgnutls26 2.8.6-1+squeeze1 the GNU TLS library - runtime libr
ii libldap-2.4-2 2.4.23-7.2 OpenLDAP libraries
ii libltdl7 2.2.6b-2 A system independent dlopen wrappe
ii libperl5.10 5.10.1-17squeeze3 shared Perl library
ii libsasl2-2 2.1.23.dfsg1-7 Cyrus SASL - authentication abstra
ii libslp1 1.2.1-7.8 OpenSLP libraries
ii libwrap0 7.6.q-19 Wietse Venema's TCP wrappers libra
ii lsb-base 3.2-23.2squeeze1 Linux Standard Base 3.2 init scrip
ii perl [libmime-base64-p 5.10.1-17squeeze3 Larry Wall's Practical Extraction
ii psmisc 22.11-1 utilities that use the proc file s
ii unixodbc 2.2.14p2-1 ODBC tools libraries
Versions of packages slapd recommends:
ii libsasl2-modules 2.1.23.dfsg1-7 Cyrus SASL - pluggable authenticat
Versions of packages slapd suggests:
ii ldap-utils 2.4.23-7.2 OpenLDAP utilities
-- Configuration Files:
/etc/default/slapd changed [not included]
/etc/init.d/slapd changed [not included]
-- debconf-show failed
More information about the Pkg-openldap-devel
mailing list