Mercurial > prosody-modules
comparison mod_statistics_mem/mod_statistics_mem.lua @ 1379:403d5cd924eb
mod_statistics_mem: Module that collects memory usage stats from /proc
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 03 Apr 2014 20:57:22 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1378:aa371405db34 | 1379:403d5cd924eb |
|---|---|
| 1 -- Probably Linux-specific memory statistics | |
| 2 | |
| 3 module:set_global(); | |
| 4 | |
| 5 local human; | |
| 6 do | |
| 7 local tostring = tostring; | |
| 8 local s_format = string.format; | |
| 9 local m_floor = math.floor; | |
| 10 local m_max = math.max; | |
| 11 local prefixes = "kMGTPEZY"; | |
| 12 local multiplier = 1024; | |
| 13 | |
| 14 function human(num) | |
| 15 num = tonumber(num) or 0; | |
| 16 local m = 0; | |
| 17 while num >= multiplier and m < #prefixes do | |
| 18 num = num / multiplier; | |
| 19 m = m + 1; | |
| 20 end | |
| 21 | |
| 22 return s_format("%0."..m_max(0,3-#tostring(m_floor(num))).."f%sB", | |
| 23 num, m > 0 and (prefixes:sub(m,m) .. "i") or ""); | |
| 24 end | |
| 25 end | |
| 26 | |
| 27 | |
| 28 local pagesize = 4096; -- according to getpagesize() | |
| 29 module:provides("statistics", { | |
| 30 statistics = { | |
| 31 memory_total = { -- virtual memory | |
| 32 get = function () | |
| 33 local statm, err = io.open"/proc/self/statm"; | |
| 34 if statm then | |
| 35 local total = statm:read"*n"; | |
| 36 statm:close(); | |
| 37 return total * pagesize; | |
| 38 else | |
| 39 module:log("debug", err); | |
| 40 end | |
| 41 end; | |
| 42 tostring = human; | |
| 43 }; | |
| 44 memory_rss = { -- actual in-memory data size | |
| 45 get = function () | |
| 46 local statm, err = io.open"/proc/self/statm"; | |
| 47 if statm then | |
| 48 statm:read"*n"; -- Total size, ignore | |
| 49 local rss = statm:read"*n"; | |
| 50 statm:close(); | |
| 51 return rss * pagesize; | |
| 52 else | |
| 53 module:log("debug", err); | |
| 54 end | |
| 55 end; | |
| 56 tostring = human; | |
| 57 }; | |
| 58 } | |
| 59 }); |
