Date: Wed, 27 Apr 2005 19:13:52 +0100 From: Gavin Atkinson <gavin.atkinson@ury.york.ac.uk> To: Oliver Brandmueller <ob@e-Gitt.NET> Cc: freebsd-stable@freebsd.org Subject: Re: nss_ldap / top startup Message-ID: <1114625632.21968.34.camel@buffy.york.ac.uk> In-Reply-To: <20050425105919.GA95908@e-Gitt.NET> References: <20050425105919.GA95908@e-Gitt.NET>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
On Mon, 2005-04-25 at 12:59 +0200, Oliver Brandmueller wrote:
> Hi,
>
> I have some servers running running on 5.4-STABLE as of Apr 5th. I use
> nss_ldap for a userbase of currently about 24000 accounts (will be
> growing to approx 60000 in the next weeks). I don't use pam_ldap
> currently, because users only need to login by IMAP, POP, SMTP and FTP,
> for all of these services daemons are used which natively auth against
> the LDAP server.
>
> The more accounts there are in the LDAP directory, the longer the
> startup of "top" takes. With the current userbase top takes about 3-4
> seconds to start (on a mostly idle Dual Xeon 2.8GHz with fast disks and
> local slapd).
FWIW, I don't think this is related to LDAP as such. I have a machine
bound to NIS with ~19000 entries in the passwd file. Top takes ages to
start up.
The problem is in machine.c - it iterates over every user in the passwd
file to figure out what how many characters longest username may be.
It's nasty and to be honest I think it can/should just be removed.
Try the attached patch just to prove that this is the cause in your case
too.
A while back, there was talk of a FreeBSD libc name cache daemon, but I
can't seem to find any reference to it now (I seem to remember the
website was within .ru, if it helps anyone find it) - though I'm not
sure it would help in this context or even if it's really the correct
way to mask the bug.
Gavin
[-- Attachment #2 --]
Index: src/usr.bin/top/machine.c
===================================================================
RCS file: /usr/cvs/src/usr.bin/top/machine.c,v
retrieving revision 1.68
diff -u -r1.68 machine.c
--- src/usr.bin/top/machine.c 16 Aug 2004 07:51:22 -0000 1.68
+++ src/usr.bin/top/machine.c 27 Apr 2005 18:03:09 -0000
@@ -228,10 +228,13 @@
modelen != sizeof(smpmode))
smpmode = 0;
+#if 0
while ((pw = getpwent()) != NULL) {
if (strlen(pw->pw_name) > namelength)
namelength = strlen(pw->pw_name);
}
+#endif
+ namelength = 8;
if (namelength < 8)
namelength = 8;
if (smpmode && namelength > 13)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1114625632.21968.34.camel>
