-
Notifications
You must be signed in to change notification settings - Fork 0
/
mod_statistics_mem.lua
59 lines (53 loc) · 1.26 KB
/
mod_statistics_mem.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
-- Probably Linux-specific memory statistics
module:set_global();
local human;
do
local tostring = tostring;
local s_format = string.format;
local m_floor = math.floor;
local m_max = math.max;
local prefixes = "kMGTPEZY";
local multiplier = 1024;
function human(num)
num = tonumber(num) or 0;
local m = 0;
while num >= multiplier and m < #prefixes do
num = num / multiplier;
m = m + 1;
end
return s_format("%0."..m_max(0,3-#tostring(m_floor(num))).."f%sB",
num, m > 0 and (prefixes:sub(m,m) .. "i") or "");
end
end
local pagesize = 4096; -- according to getpagesize()
module:provides("statistics", {
statistics = {
memory_total = { -- virtual memory
get = function ()
local statm, err = io.open"/proc/self/statm";
if statm then
local total = statm:read"*n";
statm:close();
return total * pagesize;
else
module:log("debug", err);
end
end;
tostring = human;
};
memory_rss = { -- actual in-memory data size
get = function ()
local statm, err = io.open"/proc/self/statm";
if statm then
statm:read"*n"; -- Total size, ignore
local rss = statm:read"*n";
statm:close();
return rss * pagesize;
else
module:log("debug", err);
end
end;
tostring = human;
};
}
});