summaryrefslogtreecommitdiff
path: root/src/ejabberd_system_monitor.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-12-17 21:03:40 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-12-17 21:03:40 +0300
commit59f4efe3dd78c87ad7eec6854e68c77b343c4258 (patch)
tree0383c0ed9e5f7c96206c807aca12e7873011e1f7 /src/ejabberd_system_monitor.erl
parentFix processing order (diff)
Kill and restart lager when it's overloaded
Diffstat (limited to 'src/ejabberd_system_monitor.erl')
-rw-r--r--src/ejabberd_system_monitor.erl19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/ejabberd_system_monitor.erl b/src/ejabberd_system_monitor.erl
index b0df101b..d2cd7d65 100644
--- a/src/ejabberd_system_monitor.erl
+++ b/src/ejabberd_system_monitor.erl
@@ -68,11 +68,7 @@ start() ->
ejabberd:start_app(os_mon).
excluded_apps() ->
- %% FIXME: lager gets overloaded very often, but
- %% it fails to get recovered after brutal kill,
- %% so it's better to make it tolerate crashes
- %% rather than ignoring the overload
- [os_mon, mnesia, sasl, stdlib, kernel, lager].
+ [os_mon, mnesia, sasl, stdlib, kernel].
%%%===================================================================
%%% gen_event callbacks
@@ -270,8 +266,11 @@ do_kill(Stats, Threshold) ->
false;
false ->
case kill_proc(Name) of
- false -> false;
- Pid -> {true, Pid}
+ false ->
+ false;
+ Pid ->
+ maybe_restart_app(App),
+ {true, Pid}
end
end;
(_) ->
@@ -295,6 +294,12 @@ kill_proc(Pid) ->
exit(Pid, kill),
Pid.
+-spec maybe_restart_app(atom()) -> any().
+maybe_restart_app(lager) ->
+ ejabberd_logger:restart();
+maybe_restart_app(_) ->
+ ok.
+
-spec opt_type(oom_killer) -> fun((boolean()) -> boolean());
(atom()) -> [atom()].
opt_type(oom_killer) ->