# HG changeset patch # User Kim Alvefur # Date 1426001680 -3600 # Node ID 2c39af0fb93b5a0d04b6249a5365296b18f0ecfe # Parent b59812aaabad8702aa9a5b50547d5b1a5aa18bfd mod_measure_memory: Module for polling memory useage from Lua, meminfo() and /proc depending on availability diff -r b59812aaabad -r 2c39af0fb93b mod_measure_memory/mod_measure_memory.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_measure_memory/mod_measure_memory.lua Tue Mar 10 16:34:40 2015 +0100 @@ -0,0 +1,43 @@ +module:set_global(); + +local measure = require"core.statsmanager".measure; +local have_pposix, pposix = pcall(require, "util.pposix"); + +local measures = {}; +setmetatable(measures, { + __index = function (t, k, m) + m = measure("sizes", "memory."..k); t[k] = m; return m; + end +}); + +module:hook("stats-update", function () + measures.lua(collectgarbage("count")*1024); +end); + +if have_pposix and pposix.meminfo then + module:hook_global("stats-update", function () + local m = measures; + for k, v in pairs(pposix.meminfo()) do + m[k](v); + end + end); +end + +local statm = io.open("/proc/self/statm"); +if statm then + statm:close(); + local pagesize = module:get_option_number("memory_pagesize", 4096); -- getconf PAGESIZE + + module:hook("stats-update", function () + local statm, err = io.open("/proc/self/statm"); + if not statm then + module:log("error", tostring(err)); + return; + end + -- virtual memory (caches, opened librarys, everything) + measures.total(statm:read("*n") * pagesize); + -- resident set size (actually used memory) + measures.rss(statm:read("*n") * pagesize); + statm:close(); + end); +end