diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2000-05-21 02:23:30 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2000-05-21 02:23:30 +0000 |
| commit | aa1617911836bd8f500320a365d59920fca2613b (patch) | |
| tree | aad6018f3a1cf8b07ff4b06ca00fef3a35c4e1f6 /src/backend/utils/mmgr/aset.c | |
| parent | 25a7a7f4469f3c861fbbe72733560dba71ae8ea7 (diff) | |
| download | postgresql-aa1617911836bd8f500320a365d59920fca2613b.tar.gz | |
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.
Diffstat (limited to 'src/backend/utils/mmgr/aset.c')
| -rw-r--r-- | src/backend/utils/mmgr/aset.c | 40 |
1 files changed, 39 insertions, 1 deletions
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); +} |
