File

mod_measure_memory/mod_measure_memory.lua @ 2670:6e01878103c0

mod_smacks: Ignore user when writing or reading session_cache on prosody 0.9 At least under some circumstances it seems that session.username is nil when a user tries to resume his session in prosody 0.9. The username is not relevant when no limiting is done (limiting the number of entries in the session cache is only possible in prosody 0.10), so this commit removes the usage of the username when accessing the prosody 0.9 session cache.
author tmolitor <thilo@eightysoft.de>
date Thu, 06 Apr 2017 02:12:14 +0200
parent 2436:a01a3fb96302
child 2708:07d6077d2db7
line wrap: on
line source

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)
		local 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("stats-update", function ()
		local m = measures;
		for k, v in pairs(pposix.meminfo()) do
			m[k](v);
		end
	end);
end

if require"lfs".attributes("/proc/self/statm", "mode") == "file" then
	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