summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@lshift.net>2009-11-25 17:09:39 +0000
committerMatthias Radestock <matthias@lshift.net>2009-11-25 17:09:39 +0000
commit6a2901709a33998d27ad2add7e3e838a105d4212 (patch)
tree96fe910401e9ec2b0547b6de3e5b793de415ae53 /src
parenta6dfa4a57a8022ee90614c9826d878ad32155728 (diff)
parentc855102f709b1f0956e465e3241cc6e14a26df54 (diff)
downloadrabbitmq-server-git-6a2901709a33998d27ad2add7e3e838a105d4212.tar.gz
merge default into bug21673
Diffstat (limited to 'src')
-rw-r--r--src/vm_memory_monitor.erl92
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) ->