@@ -130,30 +130,35 @@ get_memory_use(ratio) ->
130
130
% % be equal to the total size of all pages mapped to the emulator,
131
131
% % according to http://erlang.org/doc/man/erlang.html#memory-0
132
132
% % erlang:memory(total) under-reports memory usage by around 20%
133
+ % %
134
+ % % Win32 Note: 3.6.12 shipped with code that used wmic.exe to get the
135
+ % % WorkingSetSize value for the running erl.exe process. Unfortunately
136
+ % % even with a moderate invocation rate of 1 ops/second that uses more
137
+ % % CPU resources than some Windows users are willing to tolerate.
138
+ % % See rabbitmq/rabbitmq-server#1343 and rabbitmq/rabbitmq-common#224
139
+ % % for details.
133
140
-spec get_process_memory () -> Bytes :: integer ().
134
141
get_process_memory () ->
135
- case get_memory_calculation_strategy () of
136
- rss ->
137
- case get_system_process_resident_memory () of
138
- {ok , MemInBytes } ->
139
- MemInBytes ;
140
- {error , Reason } ->
141
- rabbit_log :debug (" Unable to get system memory used. Reason: ~p ."
142
- " Falling back to erlang memory reporting" ,
143
- [Reason ]),
144
- erlang :memory (total )
145
- end ;
146
- erlang ->
147
- erlang :memory (total )
148
- end .
142
+ get_process_memory_using_strategy (get_memory_calculation_strategy ()).
143
+
144
+ get_process_memory_using_strategy (allocated ) ->
145
+ recon_alloc :memory (allocated );
146
+ % % backwards compatibility
147
+ get_process_memory_using_strategy (erlang ) ->
148
+ erlang :memory (total );
149
+ get_process_memory_using_strategy (legacy ) ->
150
+ erlang :memory (total );
151
+ % % backwards compatibility
152
+ get_process_memory_using_strategy (rss ) ->
153
+ recon_alloc :memory (allocated ).
149
154
150
155
-spec get_memory_calculation_strategy () -> rss | erlang .
151
156
get_memory_calculation_strategy () ->
152
157
case rabbit_misc :get_env (rabbit , vm_memory_calculation_strategy , rss ) of
153
- erlang ->
154
- erlang ;
155
- rss ->
156
- rss ;
158
+ allocated -> allocated ;
159
+ erlang -> erlang ;
160
+ legacy -> legacy ;
161
+ rss -> rss ;
157
162
UnsupportedValue ->
158
163
rabbit_log :warning (
159
164
" Unsupported value '~p ' for vm_memory_calculation_strategy. "
@@ -164,54 +169,6 @@ get_memory_calculation_strategy() ->
164
169
rss
165
170
end .
166
171
167
- -spec get_system_process_resident_memory () -> {ok , Bytes :: integer ()} | {error , term ()}.
168
- get_system_process_resident_memory () ->
169
- try
170
- get_system_process_resident_memory (os :type ())
171
- catch _ :Error ->
172
- {error , {" Failed to get process resident memory" , Error }}
173
- end .
174
-
175
- get_system_process_resident_memory ({unix ,darwin }) ->
176
- get_ps_memory ();
177
-
178
- get_system_process_resident_memory ({unix , linux }) ->
179
- get_ps_memory ();
180
-
181
- get_system_process_resident_memory ({unix ,freebsd }) ->
182
- get_ps_memory ();
183
-
184
- get_system_process_resident_memory ({unix ,openbsd }) ->
185
- get_ps_memory ();
186
-
187
- get_system_process_resident_memory ({win32 ,_OSname }) ->
188
- % % Note: 3.6.12 shipped with code that used wmic.exe to get the
189
- % % WorkingSetSize value for the running erl.exe process. Unfortunately
190
- % % even with a moderate invocation rate of 1 ops/second that uses more
191
- % % CPU resources than some Windows users are willing to tolerate.
192
- % % See rabbitmq/rabbitmq-server#1343 for details.
193
- {ok , erlang :memory (total )};
194
-
195
- get_system_process_resident_memory ({unix , sunos }) ->
196
- get_ps_memory ();
197
-
198
- get_system_process_resident_memory ({unix , aix }) ->
199
- get_ps_memory ();
200
-
201
- get_system_process_resident_memory (_OsType ) ->
202
- {error , not_implemented_for_os }.
203
-
204
- get_ps_memory () ->
205
- OsPid = os :getpid (),
206
- Cmd = " ps -p " ++ OsPid ++ " -o rss=" ,
207
- CmdOutput = os :cmd (Cmd ),
208
- case re :run (CmdOutput , " [0-9]+" , [{capture , first , list }]) of
209
- {match , [Match ]} ->
210
- {ok , list_to_integer (Match ) * 1024 };
211
- _ ->
212
- {error , {unexpected_output_from_command , Cmd , CmdOutput }}
213
- end .
214
-
215
172
% %----------------------------------------------------------------------------
216
173
% % gen_server callbacks
217
174
% %----------------------------------------------------------------------------
@@ -424,18 +381,18 @@ cmd(Command) ->
424
381
% % Windows and Freebsd code based on: memsup:get_memory_usage/1
425
382
% % Original code was part of OTP and released under "Erlang Public License".
426
383
427
- get_total_memory ({unix ,darwin }) ->
384
+ get_total_memory ({unix , darwin }) ->
428
385
sysctl (" hw.memsize" );
429
386
430
- get_total_memory ({unix ,freebsd }) ->
387
+ get_total_memory ({unix , freebsd }) ->
431
388
PageSize = sysctl (" vm.stats.vm.v_page_size" ),
432
389
PageCount = sysctl (" vm.stats.vm.v_page_count" ),
433
390
PageCount * PageSize ;
434
391
435
- get_total_memory ({unix ,openbsd }) ->
392
+ get_total_memory ({unix , openbsd }) ->
436
393
sysctl (" hw.usermem" );
437
394
438
- get_total_memory ({win32 ,_OSname }) ->
395
+ get_total_memory ({win32 , _OSname }) ->
439
396
[Result |_ ] = os_mon_sysinfo :get_mem_info (),
440
397
{ok , [_MemLoad , TotPhys , _AvailPhys , _TotPage , _AvailPage , _TotV , _AvailV ],
441
398
_RestStr } =
0 commit comments