diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2012-11-06 12:33:56 +0000 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2012-11-06 12:33:56 +0000 |
| commit | e882a4ed8a411ef9f237f3c2db1eb2071a6e8d9d (patch) | |
| tree | c5caad92f9bbee55723bdcb85f93ca7a7b7cc485 /src | |
| parent | 8206c8adfa9f1dd28f740c9e827d850677f36b52 (diff) | |
| download | rabbitmq-server-git-e882a4ed8a411ef9f237f3c2db1eb2071a6e8d9d.tar.gz | |
GC the world when memory alarm goes off.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_alarm.erl | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/rabbit_alarm.erl b/src/rabbit_alarm.erl index e6625b2b90..7b706bd8a0 100644 --- a/src/rabbit_alarm.erl +++ b/src/rabbit_alarm.erl @@ -18,7 +18,7 @@ -behaviour(gen_event). --export([start_link/0, start/0, stop/0, register/2, set_alarm/1, +-export([start_link/0, start/0, stop/0, register/2, set_alarm/1, set_alarm_gc/1, clear_alarm/1, get_alarms/0, on_node_up/1, on_node_down/1]). -export([init/1, handle_call/2, handle_event/2, handle_info/2, @@ -38,6 +38,7 @@ -spec(start/0 :: () -> 'ok'). -spec(stop/0 :: () -> 'ok'). -spec(register/2 :: (pid(), rabbit_types:mfargs()) -> boolean()). +-spec(set_alarm_gc/1 :: (any()) -> 'ok'). -spec(set_alarm/1 :: (any()) -> 'ok'). -spec(clear_alarm/1 :: (any()) -> 'ok'). -spec(on_node_up/1 :: (node()) -> 'ok'). @@ -55,7 +56,7 @@ start() -> ok = gen_event:add_handler(?SERVER, ?MODULE, []), {ok, MemoryWatermark} = application:get_env(vm_memory_high_watermark), rabbit_sup:start_restartable_child( - vm_memory_monitor, [MemoryWatermark, fun rabbit_alarm:set_alarm/1, + vm_memory_monitor, [MemoryWatermark, fun rabbit_alarm:set_alarm_gc/1, fun rabbit_alarm:clear_alarm/1]), {ok, DiskLimit} = application:get_env(disk_free_limit), rabbit_sup:start_restartable_child(rabbit_disk_monitor, [DiskLimit]), @@ -67,8 +68,10 @@ register(Pid, HighMemMFA) -> gen_event:call(?SERVER, ?MODULE, {register, Pid, HighMemMFA}, infinity). -set_alarm(Alarm) -> gen_event:notify(?SERVER, {set_alarm, Alarm}). -clear_alarm(Alarm) -> gen_event:notify(?SERVER, {clear_alarm, Alarm}). +set_alarm_gc(Alarm) -> [erlang:garbage_collect(P) || P <- processes()], + set_alarm(Alarm). +set_alarm(Alarm) -> gen_event:notify(?SERVER, {set_alarm, Alarm}). +clear_alarm(Alarm) -> gen_event:notify(?SERVER, {clear_alarm, Alarm}). get_alarms() -> gen_event:call(?SERVER, ?MODULE, get_alarms, infinity). |
