From aa1617911836bd8f500320a365d59920fca2613b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 21 May 2000 02:23:30 +0000 Subject: [PATCH] Add debug code to aid in memory-leak tracking: if SHOW_MEMORY_STATS is defined then statistics about memory usage of all the global memory contexts are printed after each commit. --- src/backend/tcop/postgres.c | 9 ++++++-- src/backend/utils/mmgr/aset.c | 40 ++++++++++++++++++++++++++++++++++- src/backend/utils/mmgr/mcxt.c | 25 ++++++++++++++++++---- src/include/utils/mcxt.h | 3 ++- src/include/utils/memutils.h | 3 ++- 5 files changed, 71 insertions(+), 9 deletions(-) diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index b6c6935613..683f057f21 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.154 2000/04/30 21:29:23 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.155 2000/05/21 02:23:30 tgl Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -1452,7 +1452,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) if (!IsUnderPostmaster) { puts("\nPOSTGRES backend interactive interface "); - puts("$Revision: 1.154 $ $Date: 2000/04/30 21:29:23 $\n"); + puts("$Revision: 1.155 $ $Date: 2000/05/21 02:23:30 $\n"); } /* @@ -1631,6 +1631,11 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) TPRINTF(TRACE_VERBOSE, "CommitTransactionCommand"); PS_SET_STATUS("commit"); CommitTransactionCommand(); +#ifdef SHOW_MEMORY_STATS + /* print global-context stats at each commit for leak tracking */ + if (ShowStats) + GlobalMemoryStats(); +#endif } else { diff --git a/src/backend/utils/mmgr/aset.c b/src/backend/utils/mmgr/aset.c index 4bc96c5a2a..574b98697d 100644 --- a/src/backend/utils/mmgr/aset.c +++ b/src/backend/utils/mmgr/aset.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/aset.c,v 1.26 2000/04/12 17:16:09 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/aset.c,v 1.27 2000/05/21 02:23:29 tgl Exp $ * * NOTE: * This is a new (Feb. 05, 1999) implementation of the allocation set @@ -541,3 +541,41 @@ AllocSetDump(AllocSet set) { elog(DEBUG, "Currently unable to dump AllocSet"); } + +/* + * AllocSetStats + * Displays stats about memory consumption of an allocset. + */ +void +AllocSetStats(AllocSet set, const char *ident) +{ + long nblocks = 0; + long nchunks = 0; + long totalspace = 0; + long freespace = 0; + AllocBlock block; + AllocChunk chunk; + int fidx; + + AssertArg(AllocSetIsValid(set)); + + for (block = set->blocks; block != NULL; block = block->next) + { + nblocks++; + totalspace += block->endptr - ((char *) block); + freespace += block->endptr - block->freeptr; + } + for (fidx = 0; fidx < ALLOCSET_NUM_FREELISTS; fidx++) + { + for (chunk = set->freelist[fidx]; chunk != NULL; + chunk = (AllocChunk) chunk->aset) + { + nchunks++; + freespace += chunk->size + ALLOC_CHUNKHDRSZ; + } + } + fprintf(stderr, + "%s: %ld total in %ld blocks; %ld free (%ld chunks); %ld used\n", + ident, totalspace, nblocks, freespace, nchunks, + totalspace - freespace); +} diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c index 29af5ce8e2..5a3be6700e 100644 --- a/src/backend/utils/mmgr/mcxt.c +++ b/src/backend/utils/mmgr/mcxt.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/mcxt.c,v 1.20 2000/01/26 05:57:30 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/mcxt.c,v 1.21 2000/05/21 02:23:29 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -489,7 +489,7 @@ GlobalMemoryDump(GlobalMemory this) if (PointerIsValid(context)) printf("\tsucessor=%s\n", GlobalMemoryGetName(context)); - AllocSetDump(&this->setData); /* XXX is this right interface */ + AllocSetDump(&this->setData); } /* @@ -511,9 +511,26 @@ DumpGlobalMemories() { GlobalMemoryDump(context); - context = (GlobalMemory) OrderedElemGetSuccessor( - &context->elemData); + context = (GlobalMemory) OrderedElemGetSuccessor(&context->elemData); } } #endif + +/* + * GlobalMemoryStats + * Displays stats about memory consumption of all global contexts. + */ +void +GlobalMemoryStats(void) +{ + GlobalMemory context; + + context = (GlobalMemory) OrderedSetGetHead(&ActiveGlobalMemorySetData); + + while (PointerIsValid(context)) + { + AllocSetStats(&context->setData, GlobalMemoryGetName(context)); + context = (GlobalMemory) OrderedElemGetSuccessor(&context->elemData); + } +} diff --git a/src/include/utils/mcxt.h b/src/include/utils/mcxt.h index 2f7ae1cf5d..7b867d8664 100644 --- a/src/include/utils/mcxt.h +++ b/src/include/utils/mcxt.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: mcxt.h,v 1.16 2000/01/26 05:58:38 momjian Exp $ + * $Id: mcxt.h,v 1.17 2000/05/21 02:23:28 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -54,6 +54,7 @@ extern void MemoryContextFree(MemoryContext context, Pointer pointer); extern MemoryContext MemoryContextSwitchTo(MemoryContext context); extern GlobalMemory CreateGlobalMemory(char *name); extern void GlobalMemoryDestroy(GlobalMemory context); +extern void GlobalMemoryStats(void); #endif /* MCXT_H */ diff --git a/src/include/utils/memutils.h b/src/include/utils/memutils.h index a42bce402c..3e6ad2e53d 100644 --- a/src/include/utils/memutils.h +++ b/src/include/utils/memutils.h @@ -13,7 +13,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: memutils.h,v 1.34 2000/04/12 17:16:55 momjian Exp $ + * $Id: memutils.h,v 1.35 2000/05/21 02:23:28 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -224,6 +224,7 @@ extern AllocPointer AllocSetRealloc(AllocSet set, AllocPointer pointer, Size size); extern void AllocSetDump(AllocSet set); +extern void AllocSetStats(AllocSet set, const char *ident); #endif /* MEMUTILS_H */ -- 2.40.0