diff options
| author | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2017-05-09 11:32:20 +0200 |
|---|---|---|
| committer | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2017-05-19 16:34:31 +0200 |
| commit | 58d7abdd8b1634f6c839ac4cc3846f6e59a365f2 (patch) | |
| tree | fdc27c42eb9f1291be78e5962bab3e6f0817b284 | |
| parent | ced8290812301cb2101b429d0cf1a6d7916daba2 (diff) | |
| download | rabbitmq-server-git-58d7abdd8b1634f6c839ac4cc3846f6e59a365f2.tar.gz | |
Move rabbit_memory_monitor:memory_use/1 to vm_memory_monitor
The function is renamed to get_memory_use/1 in the process, to match
other functions in the vm_memory_monitor module.
The file_handle_cache uses that function. By moving it to
vm_memory_monitor, we remove a dependency of file_handle_cache on a
rabbit_* module. This will allow us to move both file_handle_cache and
vm_memory_monitor to rabbitmq-common and help remove a dependency in the
Erlang client on the broker because the former calls
file_handle_cache:obtain/0.
To sum up the situation before this commit with a graph:
amqp_network_connection --[depends on]--> file_handle_cache
(amqp_client) (rabbit)
file_handle_cache --[depends on]--> rabbit_memory_monitor
(rabbit) (rabbit)
And the situation we want to reach after the move:
amqp_network_connection --[depends on]--> file_handle_cache
(amqp_client) (rabbit_common)
file_handle_cache --[depends on]--> vm_memory_monitor
(rabbit_common) (rabbit_common)
rabbit_memory_monitor --[depends on]--> vm_memory_monitor
(rabbit) (rabbit_common)
[#118490793]
| -rw-r--r-- | src/file_handle_cache.erl | 2 | ||||
| -rw-r--r-- | src/rabbit_memory_monitor.erl | 14 | ||||
| -rw-r--r-- | src/vm_memory_monitor.erl | 17 |
3 files changed, 19 insertions, 14 deletions
diff --git a/src/file_handle_cache.erl b/src/file_handle_cache.erl index 5a03bd93cb..d4f83be513 100644 --- a/src/file_handle_cache.erl +++ b/src/file_handle_cache.erl @@ -1040,7 +1040,7 @@ tune_read_buffer_limit(Handle = #handle{read_buffer = Buf, end, Lim)}. maybe_reduce_read_cache(SparedRefs) -> - case rabbit_memory_monitor:memory_use(bytes) of + case vm_memory_monitor:get_memory_use(bytes) of {_, infinity} -> ok; {MemUse, MemLimit} when MemUse < MemLimit -> ok; {MemUse, MemLimit} -> reduce_read_cache( diff --git a/src/rabbit_memory_monitor.erl b/src/rabbit_memory_monitor.erl index de0b50ccdc..06ffb77b67 100644 --- a/src/rabbit_memory_monitor.erl +++ b/src/rabbit_memory_monitor.erl @@ -89,18 +89,8 @@ conserve_resources(Pid, disk, {_, Conserve, Node}) when node(Pid) =:= Node -> conserve_resources(_Pid, _Source, _Conserve) -> ok. -memory_use(bytes) -> - MemoryLimit = vm_memory_monitor:get_memory_limit(), - {erlang:memory(total), case MemoryLimit > 0.0 of - true -> MemoryLimit; - false -> infinity - end}; -memory_use(ratio) -> - MemoryLimit = vm_memory_monitor:get_memory_limit(), - case MemoryLimit > 0.0 of - true -> erlang:memory(total) / MemoryLimit; - false -> infinity - end. +memory_use(Type) -> + vm_memory_monitor:get_memory_use(Type). %%---------------------------------------------------------------------------- %% Gen_server callbacks diff --git a/src/vm_memory_monitor.erl b/src/vm_memory_monitor.erl index 7c44cb8e12..9b401748e0 100644 --- a/src/vm_memory_monitor.erl +++ b/src/vm_memory_monitor.erl @@ -35,7 +35,7 @@ -export([get_total_memory/0, get_vm_limit/0, get_check_interval/0, set_check_interval/1, get_vm_memory_high_watermark/0, set_vm_memory_high_watermark/1, - get_memory_limit/0]). + get_memory_limit/0, get_memory_use/1]). %% for tests -export([parse_line_linux/1]). @@ -73,6 +73,8 @@ -spec get_vm_memory_high_watermark() -> vm_memory_high_watermark(). -spec set_vm_memory_high_watermark(vm_memory_high_watermark()) -> 'ok'. -spec get_memory_limit() -> non_neg_integer(). +-spec get_memory_use(bytes) -> {non_neg_integer(), float() | infinity}; + (ratio) -> float() | infinity. %%---------------------------------------------------------------------------- %% Public API @@ -106,6 +108,19 @@ set_vm_memory_high_watermark(Fraction) -> get_memory_limit() -> gen_server:call(?MODULE, get_memory_limit, infinity). +get_memory_use(bytes) -> + MemoryLimit = get_memory_limit(), + {erlang:memory(total), case MemoryLimit > 0.0 of + true -> MemoryLimit; + false -> infinity + end}; +get_memory_use(ratio) -> + MemoryLimit = get_memory_limit(), + case MemoryLimit > 0.0 of + true -> erlang:memory(total) / MemoryLimit; + false -> infinity + end. + %%---------------------------------------------------------------------------- %% gen_server callbacks %%---------------------------------------------------------------------------- |
