diff options
| author | Matthew Sackman <matthew@lshift.net> | 2009-06-22 13:50:47 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@lshift.net> | 2009-06-22 13:50:47 +0100 |
| commit | 2413328c6add2a745480256a4a7d8cc4d0d4dc27 (patch) | |
| tree | 1c98bd6a3241b2126c3917e173c5c478c0b0a809 | |
| parent | 790e6cf6e736a95f89e13ebeb5f7659114d3359c (diff) | |
| download | rabbitmq-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.erl | 11 |
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. |
