summaryrefslogtreecommitdiff
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-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.