aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEvgeny Khramtsov <ekhramtsov@process-one.net>2019-10-25 16:02:24 +0300
committerEvgeny Khramtsov <ekhramtsov@process-one.net>2019-10-25 16:02:24 +0300
commit7eda35b945f6d90f4549abfa40145fd3824a1321 (patch)
tree790993b81b02dbbda42caf0e71294007117f0ff6 /src
parentStop SASL application in ejabberd_logger:flush() (diff)
Introduce 'gc' ejabberdctl command
The command forces garbage collection of all running Erlang processes. The return is always success.
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_admin.erl8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/ejabberd_admin.erl b/src/ejabberd_admin.erl
index 2dddb3cad..3e02e6bd0 100644
--- a/src/ejabberd_admin.erl
+++ b/src/ejabberd_admin.erl
@@ -58,6 +58,7 @@
mnesia_change_nodename/4,
restore/1, % Still used by some modules
clear_cache/0,
+ gc/0,
get_commands_spec/0
]).
%% gen_server callbacks
@@ -384,6 +385,10 @@ get_commands_spec() ->
#ejabberd_commands{name = clear_cache, tags = [server],
desc = "Clear database cache on all nodes",
module = ?MODULE, function = clear_cache,
+ args = [], result = {res, rescode}},
+ #ejabberd_commands{name = gc, tags = [server],
+ desc = "Force full garbage collection",
+ module = ?MODULE, function = gc,
args = [], result = {res, rescode}}
].
@@ -834,6 +839,9 @@ clear_cache() ->
Nodes = ejabberd_cluster:get_nodes(),
lists:foreach(fun(T) -> ets_cache:clear(T, Nodes) end, ets_cache:all()).
+gc() ->
+ lists:foreach(fun erlang:garbage_collect/1, processes()).
+
-spec is_my_host(binary()) -> boolean().
is_my_host(Host) ->
try ejabberd_router:is_my_host(Host)