[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: Solaris 32bit File Descriptor Limit (ITS#2636)



Ok, I've been doing some testing and have a question I hope someone can
answer.  I've compiled 2.1.22 64bit for Solaris expecting to solve this 256
simulataneous connection issue I'm having, but something's still not right.
After loading the databases, I re-run the same test on the 64bit binary and
when I get 256 descriptors open, I get almost the exact same log message,
but now it logs at 266 instead of 256:

slapd[28075]: [ID 759906 local6.debug] daemon: 266 beyond descriptor table
size 256

The ldapsearh client produces this:

ldap_simple_bind_s: Can't contact LDAP server

It seems that the other threads block all connections over 256 until there
is a free descriptor <256 at which point the query is returned.  Is this
right?  Why?  Is there a limit in the code or something?

I've done a lot of testing and checked the process with plimit and can see
it is not an OS barrier (unlimited).  I don't really see a need to debug,
yet, because it's not coring or anything like that.  But, I'm sure the
search will eventually abort and/or time out (tested) if I don't free a
descriptor <256 so I think this is a bug or something I'm just completely
missing.  Threads are set to 32 and cachesize, dbcachesize, etc are all
default.  I'm using back-ldbm and back-glue because my tree is really large
and I needed to split the db up (and these are replicas).  Here is an output
of the pmap and for reference, none of the libraries are 32bit:

28075:  /usr/local/openldap64/libexec/slapd -f
/openldap/backup/replica64/etc/
0000000100000000   2608K read/exec
/usr/local/openldap64/libexec/slapd
000000010038A000     32K read/write/exec
/usr/local/openldap64/libexec/slapd
0000000100392000  22760K read/write/exec     [ heap ]
FFFFFFFF7B3FC000     16K read/write          [ anon ]
FFFFFFFF7BBFC000     16K read/write          [ anon ]
FFFFFFFF7D300000     16K read/write          [ anon ]
FFFFFFFF7D7F8000     32K read/write          [ anon ]
FFFFFFFF7D900000    112K read/write          [ anon ]
FFFFFFFF7DA00000     16K read/write          [ anon ]
FFFFFFFF7DB00000     16K read/write          [ anon ]
FFFFFFFF7DC00000      8K read/write/exec     [ anon ]
FFFFFFFF7DD00000     96K read/exec
/usr/lib/lwp/sparcv9/libthread.so.1
FFFFFFFF7DE18000     16K read/write/exec
/usr/lib/lwp/sparcv9/libthread.so.1
FFFFFFFF7DF00000      8K read/write/exec/shared   [ anon ]
FFFFFFFF7E000000     16K read/exec         /usr/lib/sparcv9/libmp.so.2
FFFFFFFF7E104000      8K read/write/exec   /usr/lib/sparcv9/libmp.so.2
FFFFFFFF7E200000      8K read/write/exec     [ anon ]
FFFFFFFF7E300000    720K read/exec         /usr/lib/sparcv9/libc.so.1
FFFFFFFF7E4B4000     56K read/write/exec   /usr/lib/sparcv9/libc.so.1
FFFFFFFF7E4C2000      8K read/write/exec   /usr/lib/sparcv9/libc.so.1
FFFFFFFF7E500000     24K read/exec         /usr/lib/sparcv9/libpthread.so.1
FFFFFFFF7E606000      8K read/write/exec   /usr/lib/sparcv9/libpthread.so.1
FFFFFFFF7E700000      8K read/exec         /usr/lib/sparcv9/libmtmalloc.so.1
FFFFFFFF7E802000      8K read/write/exec   /usr/lib/sparcv9/libmtmalloc.so.1
FFFFFFFF7E900000      8K read/exec
/usr/platform/sun4u-us3/lib/sparcv9/libc_psr.so.1
FFFFFFFF7EA00000     56K read/exec         /usr/lib/sparcv9/libsocket.so.1
FFFFFFFF7EB0E000     16K read/write/exec   /usr/lib/sparcv9/libsocket.so.1
FFFFFFFF7EC00000      8K read/write/exec     [ anon ]
FFFFFFFF7ED00000    664K read/exec         /usr/lib/sparcv9/libnsl.so.1
FFFFFFFF7EEA6000     56K read/write/exec   /usr/lib/sparcv9/libnsl.so.1
FFFFFFFF7EEB4000     40K read/write/exec   /usr/lib/sparcv9/libnsl.so.1
FFFFFFFF7EF00000     32K read/exec         /usr/lib/sparcv9/libgen.so.1
FFFFFFFF7F008000      8K read/write/exec   /usr/lib/sparcv9/libgen.so.1
FFFFFFFF7F100000    232K read/exec         /usr/lib/sparcv9/libresolv.so.2
FFFFFFFF7F23A000     32K read/write/exec   /usr/lib/sparcv9/libresolv.so.2
FFFFFFFF7F300000      8K read/exec         /usr/lib/sparcv9/libdl.so.1
FFFFFFFF7F400000      8K read/shared       dev:238,6 ino:493389
FFFFFFFF7F500000      8K read/write/exec     [ anon ]
FFFFFFFF7F600000    144K read/exec         /usr/lib/sparcv9/ld.so.1
FFFFFFFF7F722000     16K read/write/exec   /usr/lib/sparcv9/ld.so.1
FFFFFFFF7FFFA000     24K read/write          [ stack ]
         total    27976K

----- Original Message ----- 
From: <joseph.tingiris@sdc.cox.net>
To: <openldap-its@OpenLDAP.org>
Sent: Tuesday, July 08, 2003 2:13 PM
Subject: Re: Solaris 32bit File Descriptor Limit (ITS#2636)


> Some more information.
>
> I can reproduce the problem fairly easily in my lab.  I just telnet to the
> port (255 times), background the processes, and then try a real ldap
> operation (ldapsearch, modify, etc) and I get LDAP_SERVER_DOWN returned.
> During this time, lsof or pfiles shows 256 descriptors in use.  I've tried
> ulimit, plimit, and all of the /etc/system settings to no avail.
>
> I found this thread
> (http://www.openldap.org/lists/openldap-software/200111/msg00324.html)
> regarding OpenLDAP 2.0.11 and it appears to be the same issue.  I found
the
> post about fsio intriguing and I may attempt to compile the 32bit version
> with these libraries instead of Sun's.  Has anyone tried this, since?
>
> Sun's Response:
>
> "For a 32-bit application, a stdio library FILE structure represents the
> underlying file descriptor as an unsigned char, limiting the range of fds
> which can be opened as FILE's to 0-255 inclusive. A common, known problem
is
> that when the 32-bit stdio is used for a large server application, the 255
> limit is frequently exceeded. Although this limitation does not exist for
> 64-bit applications, this problem will always remain for 32-bit
> applications."
>
> Sun also suggests using open() instead of fopen() ... would a fix of this
> nature be possible for OpenLDAP?
>
> I've got a valid OpenLDAP 2.1.16 64bit build working and I'm testing it,
> now.  I expect this will be my final resolution, but until then I will
> reserve further comments and settle for yet another question.  Who else is
> using 64bit OpenLDAP on Solaris 2.8 and what are your experiences,
good/bad?
>
> Thanks!
>
> Joseph
>
> ----- Original Message ----- 
> From: <joseph.tingiris@cox.net>
> To: <openldap-its@OpenLDAP.org>
> Sent: Tuesday, July 08, 2003 11:32 AM
> Subject: Solaris 32bit File Descriptor Limit (ITS#2636)
>
>
> > Full_Name: Joseph Tingiris
> > Version: 2.1.16
> > OS: Solaris 8
> > URL: ftp://ftp.openldap.org/incoming/
> > Submission from: (NULL) (206.157.230.254)
> >
> >
> > Under high load, I get the following log message:
> >
> > Jul  6 23:49:34 lakeldap01 slapd[10327]: [ID 759906 local5.debug]
daemon:
> 256
> > beyond descriptor table size 256
> >
> > I've experienced this with Apache and understand that it is a 32bit
limit
> on
> > descriptors.  Again, 32bit Apache has a workaround for this that allows
> the
> > connection table to use non-file type descriptors.
> >
> > Does anyone know of a simple workaround for this, other than going to a
> 64bit
> > compiled version?
> >
> > Thanks!
> >
> >