From 39f9a96b6c3c8276d715d8a921f17767efe1dfb5 Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Thu, 23 Jul 2015 16:47:35 +0800 Subject: [PATCH] add cmemory.info() returns a table of c memory info --- lualib-src/lua-memory.c | 1 + service/cmemory.lua | 6 +++++- skynet-src/malloc_hook.c | 15 +++++++++++++++ skynet-src/malloc_hook.h | 2 ++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lualib-src/lua-memory.c b/lualib-src/lua-memory.c index 17e7cd40..67a3acf6 100644 --- a/lualib-src/lua-memory.c +++ b/lualib-src/lua-memory.c @@ -42,6 +42,7 @@ luaopen_memory(lua_State *L) { { "block", lblock }, { "dumpinfo", ldumpinfo }, { "dump", ldump }, + { "info", dump_mem_lua }, { NULL, NULL }, }; diff --git a/service/cmemory.lua b/service/cmemory.lua index 06627ae3..e33eb42f 100644 --- a/service/cmemory.lua +++ b/service/cmemory.lua @@ -2,7 +2,11 @@ local skynet = require "skynet" local memory = require "memory" memory.dumpinfo() -memory.dump() +--memory.dump() +local info = memory.info() +for k,v in pairs(info) do + print(string.format(":%08x %gK",k,v/1024)) +end print("Total memory:", memory.total()) print("Total block:", memory.block()) diff --git a/skynet-src/malloc_hook.c b/skynet-src/malloc_hook.c index 9b3949a6..d9ad6f32 100644 --- a/skynet-src/malloc_hook.c +++ b/skynet-src/malloc_hook.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "malloc_hook.h" #include "skynet.h" @@ -224,3 +225,17 @@ skynet_lalloc(void *ud, void *ptr, size_t osize, size_t nsize) { return skynet_realloc(ptr, nsize); } } + +int +dump_mem_lua(lua_State *L) { + int i; + lua_newtable(L); + for(i=0; ihandle != 0 && data->allocated != 0) { + lua_pushinteger(L, data->allocated); + lua_rawseti(L, -2, (lua_Integer)data->handle); + } + } + return 1; +} diff --git a/skynet-src/malloc_hook.h b/skynet-src/malloc_hook.h index d35551d1..03339556 100644 --- a/skynet-src/malloc_hook.h +++ b/skynet-src/malloc_hook.h @@ -2,6 +2,7 @@ #define SKYNET_MALLOC_HOOK_H #include +#include extern size_t malloc_used_memory(void); extern size_t malloc_memory_block(void); @@ -9,6 +10,7 @@ extern void memory_info_dump(void); extern size_t mallctl_int64(const char* name, size_t* newval); extern int mallctl_opt(const char* name, int* newval); extern void dump_c_mem(void); +extern int dump_mem_lua(lua_State *L); #endif /* SKYNET_MALLOC_HOOK_H */