diff options
| author | Emile Joubert <emile@rabbitmq.com> | 2011-09-19 10:52:48 +0100 |
|---|---|---|
| committer | Emile Joubert <emile@rabbitmq.com> | 2011-09-19 10:52:48 +0100 |
| commit | f95f2fd23d069743a3de0c8e8ef6ef4086785360 (patch) | |
| tree | d488a4b5395d428ed5183cb2c7655e688d5d4bb8 /src | |
| parent | bb6fdac070867685f6adb37f008a870fb1ecf8dc (diff) | |
| download | rabbitmq-server-git-f95f2fd23d069743a3de0c8e8ef6ef4086785360.tar.gz | |
Better default last memory limit during updates
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_memory_monitor.erl | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/rabbit_memory_monitor.erl b/src/rabbit_memory_monitor.erl index e8d2d1d1bc..3ce3a955dc 100644 --- a/src/rabbit_memory_monitor.erl +++ b/src/rabbit_memory_monitor.erl @@ -36,6 +36,7 @@ queue_durations, %% ets #process queue_duration_sum, %% sum of all queue_durations queue_duration_count, %% number of elements in sum + last_memory_limit, %% memory limit at last update desired_duration %% the desired queue duration }). @@ -109,6 +110,8 @@ stop() -> %%---------------------------------------------------------------------------- init([]) -> + LastLimit = memory_limit(?MEMORY_SIZE_FOR_DISABLED_VMM), + {ok, TRef} = timer:apply_interval(?DEFAULT_UPDATE_INTERVAL, ?SERVER, update, []), @@ -119,6 +122,7 @@ init([]) -> queue_durations = Ets, queue_duration_sum = 0.0, queue_duration_count = 0, + last_memory_limit = LastLimit, desired_duration = infinity })}. handle_call({report_ram_duration, Pid, QueueDuration}, From, @@ -214,16 +218,12 @@ internal_deregister(Pid, Demonitor, queue_duration_count = Count1 } end. -internal_update(State = #state { queue_durations = Durations, +internal_update(State = #state { last_memory_limit = LastLimit, + queue_durations = Durations, desired_duration = DesiredDurationAvg, queue_duration_sum = Sum, queue_duration_count = Count }) -> - MemoryLimit = trunc(?MEMORY_LIMIT_SCALING * - (try - vm_memory_monitor:get_memory_limit() - catch - exit:{noproc, _} -> ?MEMORY_SIZE_FOR_DISABLED_VMM - end)), + MemoryLimit = memory_limit(LastLimit), MemoryRatio = erlang:memory(total) / MemoryLimit, DesiredDurationAvg1 = case MemoryRatio < ?LIMIT_THRESHOLD orelse Count == 0 of @@ -236,7 +236,8 @@ internal_update(State = #state { queue_durations = Durations, end, (Sum1 / Count) / MemoryRatio end, - State1 = State #state { desired_duration = DesiredDurationAvg1 }, + State1 = State #state { last_memory_limit = MemoryLimit, + desired_duration = DesiredDurationAvg1 }, %% only inform queues immediately if the desired duration has %% decreased @@ -274,3 +275,11 @@ internal_update(State = #state { queue_durations = Durations, end, true, Durations) end, State1. + +memory_limit(Default) -> + trunc(?MEMORY_LIMIT_SCALING * + (try + vm_memory_monitor:get_memory_limit() + catch + exit:{noproc, _} -> Default + end)). |
