summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@lshift.net>2009-06-22 13:50:47 +0100
committerMatthew Sackman <matthew@lshift.net>2009-06-22 13:50:47 +0100
commit2413328c6add2a745480256a4a7d8cc4d0d4dc27 (patch)
tree1c98bd6a3241b2126c3917e173c5c478c0b0a809
parent790e6cf6e736a95f89e13ebeb5f7659114d3359c (diff)
downloadrabbitmq-server-git-2413328c6add2a745480256a4a7d8cc4d0d4dc27.tar.gz
Added a time interval so that we report at a maximum of once per second. I guess the only reason for keeping the other counter which is the min number of messages the process has received between reporting memory, is that it's much faster to decrement that counter and ceq0 than do the time calculation for every single message.
-rw-r--r--src/rabbit_amqqueue_process.erl11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl
index 0eff9e1b3a..2245e12f92 100644
--- a/src/rabbit_amqqueue_process.erl
+++ b/src/rabbit_amqqueue_process.erl
@@ -38,6 +38,7 @@
-define(UNSENT_MESSAGE_LIMIT, 100).
-define(HIBERNATE_AFTER, 1000).
-define(MEMORY_REPORT_INTERVAL, 500).
+-define(MEMORY_REPORT_TIME_INTERVAL, 1000000). %% 1 second in microseconds
-export([start_link/1]).
@@ -110,7 +111,7 @@ init(Q = #amqqueue { name = QName, durable = Durable }) ->
active_consumers = queue:new(),
blocked_consumers = queue:new(),
memory_report_counter = ?MEMORY_REPORT_INTERVAL,
- old_memory_report = 1
+ old_memory_report = {1, now()}
}, ?HIBERNATE_AFTER}.
terminate(_Reason, State) ->
@@ -538,7 +539,7 @@ i(memory, _) ->
i(Item, _) ->
throw({bad_argument, Item}).
-report_memory(State = #q { old_memory_report = OldMem,
+report_memory(State = #q { old_memory_report = {OldMem, Then},
mixed_state = MS }) ->
MSize = rabbit_mixed_queue:estimate_queue_memory(MS),
NewMem = case MSize of
@@ -546,10 +547,12 @@ report_memory(State = #q { old_memory_report = OldMem,
N -> N
end,
State1 = State #q { memory_report_counter = ?MEMORY_REPORT_INTERVAL },
- case (NewMem / OldMem) > 1.1 orelse (OldMem / NewMem) > 1.1 of
+ Now = now(),
+ case ((NewMem / OldMem) > 1.1 orelse (OldMem / NewMem) > 1.1) andalso
+ (?MEMORY_REPORT_TIME_INTERVAL < timer:now_diff(Now, Then)) of
true ->
rabbit_queue_mode_manager:report_memory(self(), NewMem),
- State1 #q { old_memory_report = NewMem };
+ State1 #q { old_memory_report = {NewMem, Now} };
false -> State1
end.