Current section
Files
Jump to
Current section
Files
src/statman_vm_metrics.erl
%% @doc: Collection of functions for sending statistics from the
-module(statman_vm_metrics).
-compile([export_all]).
get_counters() ->
{{input, InputBytes}, {output, OutputBytes}} = erlang:statistics(io),
[{{vm, io_in_bytes}, InputBytes}, {{vm, io_out_bytes}, OutputBytes}].
get_gauges() ->
Memory = lists:map(fun ({K, V}) ->
{{vm_memory, K}, V}
end, erlang:memory()),
RunQueue = {{vm, run_queue}, erlang:statistics(run_queue)},
ProcessCount = {{vm, process_count}, erlang:system_info(process_count)},
[RunQueue, ProcessCount] ++ Memory ++ message_stats() ++ ets_stats().
message_stats() ->
ProcessInfo = lists:flatmap(
fun (Pid) ->
case process_info(Pid, message_queue_len) of
undefined ->
[];
{message_queue_len, 0} ->
[];
{message_queue_len, Count} ->
[{Count, Pid}]
end
end, processes()),
TotalQueue = lists:sum(element(1, lists:unzip(ProcessInfo))),
[{{vm, processes_with_queues}, length(ProcessInfo)},
{{vm, messages_in_queue}, TotalQueue}].
ets_stats() ->
TotalSize = lists:sum(
lists:map(fun (T) ->
case ets:info(T, size) of
N when is_integer(N) ->
N;
undefined ->
0
end
end, ets:all())),
[{{vm_ets, objects}, TotalSize}].
gc(undefined) ->
{NumGCs, _, _} = erlang:statistics(garbage_collection),
{NumGCs, []};
gc(PrevNumGCs) ->
{NumGCs, _, 0} = erlang:statistics(garbage_collection),
{NumGCs, [{{vm, gcs}, NumGCs - PrevNumGCs}]}.