unsigned int size; /* chunk size */
unsigned int flags; /* MEM_F_* */
unsigned int users; /* number of pools sharing this zone */
+ unsigned int failed; /* failed allocations */
char name[12]; /* name of the pool */
};
*/
void dump_pools_to_trash();
void dump_pools(void);
+int pool_total_failures();
+unsigned long pool_total_allocated();
+unsigned long pool_total_used();
/*
* This function frees whatever can be freed in pool <pool>.
"Uptime: %dd %dh%02dm%02ds\n"
"Uptime_sec: %d\n"
"Memmax_MB: %d\n"
+ "PoolAlloc_MB: %d\n"
+ "PoolUsed_MB: %d\n"
+ "PoolFailed: %d\n"
"Ulimit-n: %d\n"
"Maxsock: %d\n"
"Maxconn: %d\n"
up / 86400, (up % 86400) / 3600, (up % 3600) / 60, (up % 60),
up,
global.rlimit_memmax,
+ (int)(pool_total_allocated() / 1048576L),
+ (int)(pool_total_used() / 1048576L),
+ pool_total_failures(),
global.rlimit_nofile,
global.maxsock, global.maxconn, global.hardmaxconn,
actconn, totalconn, global.req_count,
ptr = MALLOC(pool->size + POOL_EXTRA);
if (!ptr) {
+ pool->failed++;
if (failed)
return NULL;
failed++;
allocated = used = nbpools = 0;
chunk_printf(&trash, "Dumping pools usage. Use SIGQUIT to flush them.\n");
list_for_each_entry(entry, &pools, list) {
- chunk_appendf(&trash, " - Pool %s (%d bytes) : %d allocated (%u bytes), %d used, %d users%s\n",
+ chunk_appendf(&trash, " - Pool %s (%d bytes) : %d allocated (%u bytes), %d used, %d failures, %d users%s\n",
entry->name, entry->size, entry->allocated,
- entry->size * entry->allocated, entry->used,
+ entry->size * entry->allocated, entry->used, entry->failed,
entry->users, (entry->flags & MEM_F_SHARED) ? " [SHARED]" : "");
allocated += entry->allocated * entry->size;
qfprintf(stderr, "%s", trash.str);
}
+/* This function returns the total number of failed pool allocations */
+int pool_total_failures()
+{
+ struct pool_head *entry;
+ int failed = 0;
+
+ list_for_each_entry(entry, &pools, list)
+ failed += entry->failed;
+ return failed;
+}
+
+/* This function returns the total amount of memory allocated in pools (in bytes) */
+unsigned long pool_total_allocated()
+{
+ struct pool_head *entry;
+ unsigned long allocated = 0;
+
+ list_for_each_entry(entry, &pools, list)
+ allocated += entry->allocated * entry->size;
+ return allocated;
+}
+
+/* This function returns the total amount of memory used in pools (in bytes) */
+unsigned long pool_total_used()
+{
+ struct pool_head *entry;
+ unsigned long used = 0;
+
+ list_for_each_entry(entry, &pools, list)
+ used += entry->used * entry->size;
+ return used;
+}
+
/*
* Local variables:
* c-indent-level: 8