Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 34 additions & 1 deletion lualib-src/lua-memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,42 @@ lblock(lua_State *L) {

static int
ldumpinfo(lua_State *L) {
memory_info_dump();
const char *opts = NULL;
if (lua_isstring(L, 1)) {
opts = luaL_checkstring(L,1);
}
memory_info_dump(opts);

return 0;
}

static int
ljestat(lua_State *L) {
static const char* names[] = {
"stats.allocated",
"stats.resident",
"stats.retained",
"stats.mapped",
"stats.active" };
static size_t flush = 1;
mallctl_int64("epoch", &flush); // refresh je.stats.cache
lua_newtable(L);
int i;
for (i = 0; i < (sizeof(names)/sizeof(names[0])); i++) {
lua_pushstring(L, names[i]);
lua_pushinteger(L, (lua_Integer) mallctl_int64(names[i], NULL));
lua_settable(L, -3);
}
return 1;
}

static int
lmallctl(lua_State *L) {
const char *name = luaL_checkstring(L,1);
lua_pushinteger(L, (lua_Integer) mallctl_int64(name, NULL));
return 1;
}

static int
ldump(lua_State *L) {
dump_c_mem();
Expand Down Expand Up @@ -69,6 +100,8 @@ luaopen_skynet_memory(lua_State *L) {
{ "total", ltotal },
{ "block", lblock },
{ "dumpinfo", ldumpinfo },
{ "jestat", ljestat },
{ "mallctl", lmallctl },
{ "dump", ldump },
{ "info", dump_mem_lua },
{ "current", lcurrent },
Expand Down
10 changes: 10 additions & 0 deletions service/debug_console.lua
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ function COMMAND.help()
debug = "debug address : debug a lua service",
signal = "signal address sig",
cmem = "Show C memory info",
jmem = "Show jemalloc mem stats",
ping = "ping address",
call = "call address ...",
trace = "trace address [proto] [on|off]",
Expand Down Expand Up @@ -342,6 +343,15 @@ function COMMAND.cmem()
return tmp
end

function COMMAND.jmem()
local info = memory.jestat()
local tmp = {}
for k,v in pairs(info) do
tmp[k] = string.format("%11d %8.2f Mb", v, v/1048576)
end
return tmp
end

function COMMAND.ping(address)
address = adjust_address(address)
local ti = skynet.now()
Expand Down
6 changes: 3 additions & 3 deletions skynet-src/malloc_hook.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,8 @@ static void malloc_oom(size_t size) {
}

void
memory_info_dump(void) {
je_malloc_stats_print(0,0,0);
memory_info_dump(const char* opts) {
je_malloc_stats_print(0,0, opts);
}

bool
Expand Down Expand Up @@ -241,7 +241,7 @@ skynet_posix_memalign(void **memptr, size_t alignment, size_t size) {
#define raw_free free

void
memory_info_dump(void) {
memory_info_dump(const char* opts) {
skynet_error(NULL, "No jemalloc");
}

Expand Down
2 changes: 1 addition & 1 deletion skynet-src/malloc_hook.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

extern size_t malloc_used_memory(void);
extern size_t malloc_memory_block(void);
extern void memory_info_dump(void);
extern void memory_info_dump(const char *opts);
extern size_t mallctl_int64(const char* name, size_t* newval);
extern int mallctl_opt(const char* name, int* newval);
extern bool mallctl_bool(const char* name, bool* newval);
Expand Down