diff --git a/.gitignore b/.gitignore index 138d33e..5d5b644 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,5 @@ libquicer_nif.so rebar3 *.crashdump _checkouts/ +.envrc +erlang_ls.config diff --git a/src/emqtt_bench.erl b/src/emqtt_bench.erl index 5575d53..9b47614 100644 --- a/src/emqtt_bench.erl +++ b/src/emqtt_bench.erl @@ -27,6 +27,9 @@ , loop/5 ]). +%% Internal callback +-export([wakeup_main_loop/2, main_loop/2]). + -define(STARTNUMBER_DESC, "The start point when assigning sequence numbers to clients. " "This is useful when running multiple emqtt-bench " @@ -502,12 +505,20 @@ main_loop(Uptime, Count) -> maybe_print_qoe(Count), maybe_dump_nst_dets(Count), garbage_collect(), - main_loop(Uptime, Count); + hibernate_main_loop(Uptime, Count); Msg -> print("main_loop_msg: ~p~n", [Msg]), - main_loop(Uptime, Count) + hibernate_main_loop(Uptime, Count) + after 5 -> + hibernate_main_loop(Uptime, Count) end. +hibernate_main_loop(Uptime, Count) -> + proc_lib:hibernate(?MODULE, wakeup_main_loop, [Uptime, Count]). + +wakeup_main_loop(Uptime, Count) -> + ?MODULE:main_loop(Uptime, Count). + maybe_dump_nst_dets(Count)-> Count == ets:info(quic_clients_nsts, size) andalso undefined =/= dets:info(dets_quic_nsts) @@ -743,7 +754,6 @@ maybe_retry(Parent, N, PubSub, Opts, ContinueFn) -> loop(Parent, N, Client, PubSub, Opts) -> Interval = proplists:get_value(interval_of_msg, Opts, 0), Prometheus = lists:member(prometheus, Opts), - Idle = max(Interval * 2, 500), MRef = proplists:get_value(publish_signal_mref, Opts), receive {'DOWN', MRef, process, _Pid, start_publishing} -> @@ -818,7 +828,7 @@ loop(Parent, N, Client, PubSub, Opts) -> io:format("client(~w): discarded unknown message ~p~n", [N, Other]), loop(Parent, N, Client, PubSub, Opts) after - Idle -> + _Idle = max(Interval * 2, 50) -> case proplists:get_bool(lowmem, Opts) of true -> erlang:garbage_collect(Client, [{type, major}]),