[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: memory leak when processing lots of non-trivial search queries
Fixed in HEAD and OPENLDAP_REL_ENG_2, thanks.
Kurt
At 02:24 AM 6/19/2001, Thomas Koch wrote:
>Hi,
>
>we are currently testing OpenLDAP 2.0.11 under somewhat heavy
>load sending lots of search requests from clients.
>Each search expr contains multiple terms and operators
>(typically 3 to 5). We also use multiple additional
>indexes (5-10) on the database, through the ldbm backend.
>
>It turns out that there seems to be a memory leak in slapd.
>Given my limited knowledge and understanding of the actual
>slapd code I have tried to track this down with mpatrol,
>which indicates two leak areas, several similar major ones
>in filterindex.c and a smaller one in filter.c.
>
>Enclosed are patches to ./servers/slapd/filter.c and
>./servers/slapd/back-ldbm/filterindex.c that seem to fix the
>problem. While slapd would fill 1GB of main memory within a
>few minutes before, it is now stable at a minor fraction of memory.
>
>Is there a chance to get this confirmed?
>
>BTW, thanks for all the excellent work. Particular 2.x has been
>a real step forward for us.
>
>Thomas
>
>
># start of patch
>
>install/openldap-2.0.11> diff -C 2 ./servers/slapd/filter.c{-2.0.11-dist,}
>*** ./servers/slapd/filter.c-2.0.11-dist Wed Oct 11 04:43:58 2000
>--- ./servers/slapd/filter.c Tue Jun 19 11:07:09 2001
>***************
>*** 562,565 ****
>--- 562,568 ----
> ber_bvfree( f->f_sub_final );
> }
>+ if (f->f_sub != NULL) {
>+ ch_free(f->f_sub);
>+ }
> break;
>
>install/openldap-2.0.11> diff -C 2 ./servers/slapd/back-ldbm/filterindex.c{-2.0.11-dist,}
>*** ./servers/slapd/back-ldbm/filterindex.c-2.0.11-dist Tue Oct 3 22:24:27 2000
>--- ./servers/slapd/back-ldbm/filterindex.c Tue Jun 19 11:06:59 2001
>***************
>*** 273,276 ****
>--- 273,279 ----
> idl_free( idl );
> idl = NULL;
>+ if ( tmp != NULL ) {
>+ idl_free( tmp );
>+ }
> Debug( LDAP_DEBUG_TRACE,
> "<= equality_candidates key read failed (%d)\n",
>***************
>*** 404,407 ****
>--- 407,413 ----
> idl_free( idl );
> idl = NULL;
>+ if ( tmp != NULL ) {
>+ idl_free( tmp );
>+ }
> Debug( LDAP_DEBUG_TRACE, "<= approx_candidates key read failed (%d)\n",
> rc, 0, 0 );
>***************
>*** 420,423 ****
>--- 426,430 ----
> idl = idl_intersection( be, idl, tmp );
> idl_free( save );
>+ idl_free( tmp );
>
> if( idl == NULL ) break;
>***************
>*** 568,571 ****
>--- 575,581 ----
> idl_free( idl );
> idl = NULL;
>+ if ( tmp != NULL ) {
>+ idl_free( tmp );
>+ }
> Debug( LDAP_DEBUG_TRACE, "<= substrings_candidates key read failed (%d)\n",
> rc, 0, 0 );
>***************
>*** 584,587 ****
>--- 594,598 ----
> idl = idl_intersection( be, idl, tmp );
> idl_free( save );
>+ idl_free( tmp );
>
> if( idl == NULL ) break;
>
># end of patch