diff options
| author | Matthias Radestock <matthias@lshift.net> | 2009-11-25 17:09:39 +0000 |
|---|---|---|
| committer | Matthias Radestock <matthias@lshift.net> | 2009-11-25 17:09:39 +0000 |
| commit | 6a2901709a33998d27ad2add7e3e838a105d4212 (patch) | |
| tree | 96fe910401e9ec2b0547b6de3e5b793de415ae53 /src | |
| parent | a6dfa4a57a8022ee90614c9826d878ad32155728 (diff) | |
| parent | c855102f709b1f0956e465e3241cc6e14a26df54 (diff) | |
| download | rabbitmq-server-git-6a2901709a33998d27ad2add7e3e838a105d4212.tar.gz | |
merge default into bug21673
Diffstat (limited to 'src')
| -rw-r--r-- | src/vm_memory_monitor.erl | 92 |
1 files changed, 47 insertions, 45 deletions
diff --git a/src/vm_memory_monitor.erl b/src/vm_memory_monitor.erl index 65d4a45103..33ff53b1ae 100644 --- a/src/vm_memory_monitor.erl +++ b/src/vm_memory_monitor.erl @@ -34,7 +34,7 @@ %% has a single process that's consuming all memory. In such a case, %% during garbage collection, Erlang tries to allocate a huge chunk of %% continuous memory, which can result in a crash or heavy swapping. -%% +%% %% This module tries to warn Rabbit before such situations occur, so %% that it has a higher chance to avoid running out of memory. %% @@ -42,7 +42,7 @@ -module(vm_memory_monitor). --behaviour(gen_server2). +-behaviour(gen_server). -export([start_link/1]). @@ -87,25 +87,55 @@ %%---------------------------------------------------------------------------- +%% Public API +%%---------------------------------------------------------------------------- + +update() -> + gen_server:cast(?SERVER, update). + +get_total_memory() -> + get_total_memory(os:type()). + +get_check_interval() -> + gen_server:call(?MODULE, get_check_interval). + +set_check_interval(Fraction) -> + gen_server:call(?MODULE, {set_check_interval, Fraction}). + +get_vm_memory_high_watermark() -> + gen_server:call(?MODULE, get_vm_memory_high_watermark). + +set_vm_memory_high_watermark(Fraction) -> + gen_server:call(?MODULE, {set_vm_memory_high_watermark, Fraction}). + +get_memory_limit() -> + try + gen_server2:call(?MODULE, get_memory_limit) + catch + exit:{noproc, _} -> undefined + end. + +%%---------------------------------------------------------------------------- %% gen_server callbacks %%---------------------------------------------------------------------------- start_link(Args) -> - gen_server2:start_link({local, ?SERVER}, ?MODULE, [Args], []). + gen_server:start_link({local, ?SERVER}, ?MODULE, [Args], []). -init([MemFraction]) -> +init([MemFraction]) -> TotalMemory = case get_total_memory() of unknown -> - rabbit_log:warning( + error_logger:warning_msg( "Unknown total memory size for your OS ~p. " - "Assuming memory size is ~pMB.~n", + "Assuming memory size is ~pMB.~n", [os:type(), trunc(?MEMORY_SIZE_FOR_UNKNOWN_OS/1048576)]), ?MEMORY_SIZE_FOR_UNKNOWN_OS; M -> M end, MemLimit = get_mem_limit(MemFraction, TotalMemory), - rabbit_log:info("Memory limit set to ~pMB.~n", [trunc(MemLimit/1048576)]), + error_logger:info_msg("Memory limit set to ~pMB.~n", + [trunc(MemLimit/1048576)]), TRef = start_timer(?DEFAULT_MEMORY_CHECK_INTERVAL), State = #state { total_memory = TotalMemory, memory_limit = MemLimit, @@ -119,8 +149,8 @@ handle_call(get_vm_memory_high_watermark, _From, State) -> handle_call({set_vm_memory_high_watermark, MemFraction}, _From, State) -> MemLimit = get_mem_limit(MemFraction, State#state.total_memory), - rabbit_log:info("Memory alarm changed to ~p, ~p bytes.~n", - [MemFraction, MemLimit]), + error_logger:info_msg("Memory alarm changed to ~p, ~p bytes.~n", + [MemFraction, MemLimit]), {reply, ok, State#state{memory_limit = MemLimit}}; handle_call(get_check_interval, _From, State) -> @@ -139,48 +169,19 @@ handle_call(_Request, _From, State) -> handle_cast(update, State) -> {noreply, internal_update(State)}; -handle_cast(_Request, State) -> +handle_cast(_Request, State) -> {noreply, State}. -handle_info(_Info, State) -> +handle_info(_Info, State) -> {noreply, State}. -terminate(_Reason, _State) -> +terminate(_Reason, _State) -> ok. -code_change(_OldVsn, State, _Extra) -> +code_change(_OldVsn, State, _Extra) -> {ok, State}. %%---------------------------------------------------------------------------- -%% Public API -%%---------------------------------------------------------------------------- - -update() -> - gen_server2:cast(?SERVER, update). - -get_total_memory() -> - get_total_memory(os:type()). - -get_check_interval() -> - gen_server2:call(?MODULE, get_check_interval). - -set_check_interval(Fraction) -> - gen_server2:call(?MODULE, {set_check_interval, Fraction}). - -get_vm_memory_high_watermark() -> - gen_server2:call(?MODULE, get_vm_memory_high_watermark). - -set_vm_memory_high_watermark(Fraction) -> - gen_server2:call(?MODULE, {set_vm_memory_high_watermark, Fraction}). - -get_memory_limit() -> - try - gen_server2:call(?MODULE, get_memory_limit) - catch - exit:{noproc, _} -> undefined - end. - -%%---------------------------------------------------------------------------- %% Server Internals %%---------------------------------------------------------------------------- @@ -201,8 +202,9 @@ internal_update(State = #state { memory_limit = MemLimit, State #state {alarmed = NewAlarmed}. emit_update_info(State, MemUsed, MemLimit) -> - rabbit_log:info("vm_memory_high_watermark ~p. Memory used:~p allowed:~p~n", - [State, MemUsed, MemLimit]). + error_logger:info_msg( + "vm_memory_high_watermark ~p. Memory used:~p allowed:~p~n", + [State, MemUsed, MemLimit]). start_timer(Timeout) -> {ok, TRef} = timer:apply_interval(Timeout, ?MODULE, update, []), @@ -214,7 +216,7 @@ get_vm_limit() -> case erlang:system_info(wordsize) of 4 -> 4294967296; %% 4 GB for 32 bits 2^32 8 -> 281474976710656 %% 256 TB for 64 bits 2^48 - %% http://en.wikipedia.org/wiki/X86-64#Virtual_address_space_details + %%http://en.wikipedia.org/wiki/X86-64#Virtual_address_space_details end. get_mem_limit(MemFraction, TotalMemory) -> |
