Mercurial > prosody-modules
comparison mod_measure_memory/mod_measure_memory.lua @ 1623:2c39af0fb93b
mod_measure_memory: Module for polling memory useage from Lua, meminfo() and /proc depending on availability
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Tue, 10 Mar 2015 16:34:40 +0100 |
| parents | |
| children | 4d38b8c03dfe |
comparison
equal
deleted
inserted
replaced
| 1622:b59812aaabad | 1623:2c39af0fb93b |
|---|---|
| 1 module:set_global(); | |
| 2 | |
| 3 local measure = require"core.statsmanager".measure; | |
| 4 local have_pposix, pposix = pcall(require, "util.pposix"); | |
| 5 | |
| 6 local measures = {}; | |
| 7 setmetatable(measures, { | |
| 8 __index = function (t, k, m) | |
| 9 m = measure("sizes", "memory."..k); t[k] = m; return m; | |
| 10 end | |
| 11 }); | |
| 12 | |
| 13 module:hook("stats-update", function () | |
| 14 measures.lua(collectgarbage("count")*1024); | |
| 15 end); | |
| 16 | |
| 17 if have_pposix and pposix.meminfo then | |
| 18 module:hook_global("stats-update", function () | |
| 19 local m = measures; | |
| 20 for k, v in pairs(pposix.meminfo()) do | |
| 21 m[k](v); | |
| 22 end | |
| 23 end); | |
| 24 end | |
| 25 | |
| 26 local statm = io.open("/proc/self/statm"); | |
| 27 if statm then | |
| 28 statm:close(); | |
| 29 local pagesize = module:get_option_number("memory_pagesize", 4096); -- getconf PAGESIZE | |
| 30 | |
| 31 module:hook("stats-update", function () | |
| 32 local statm, err = io.open("/proc/self/statm"); | |
| 33 if not statm then | |
| 34 module:log("error", tostring(err)); | |
| 35 return; | |
| 36 end | |
| 37 -- virtual memory (caches, opened librarys, everything) | |
| 38 measures.total(statm:read("*n") * pagesize); | |
| 39 -- resident set size (actually used memory) | |
| 40 measures.rss(statm:read("*n") * pagesize); | |
| 41 statm:close(); | |
| 42 end); | |
| 43 end |
