diff options
author | Russell Branca <chewbranca@apache.org> | 2020-09-23 14:05:49 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-23 14:05:49 -0700 |
commit | f1906774e727982621a1acd8961a7a0483314ffb (patch) | |
tree | bc2a00425d12c0b16a4bb493cb6ed4e6668235fa | |
parent | 5cc430f0ff8428a57d95f3179983d170fb948cfc (diff) | |
download | couchdb-f1906774e727982621a1acd8961a7a0483314ffb.tar.gz |
Workaround dirty schedulers in run_queue stats (#3168)
-rw-r--r-- | src/chttpd/src/chttpd_node.erl | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/chttpd/src/chttpd_node.erl b/src/chttpd/src/chttpd_node.erl index 1ca4bbd5e..0159672f5 100644 --- a/src/chttpd/src/chttpd_node.erl +++ b/src/chttpd/src/chttpd_node.erl @@ -15,7 +15,8 @@ -export([ handle_node_req/1, - get_stats/0 + get_stats/0, + run_queues/0 ]). -include_lib("couch/include/couch_db.hrl"). @@ -212,10 +213,12 @@ get_stats() -> {CF, CDU} = db_pid_stats(), MessageQueues0 = [{couch_file, {CF}}, {couch_db_updater, {CDU}}], MessageQueues = MessageQueues0 ++ message_queues(registered()), + {SQ, DCQ} = run_queues(), [ {uptime, couch_app:uptime() div 1000}, {memory, {Memory}}, - {run_queue, statistics(run_queue)}, + {run_queue, SQ}, + {run_queue_dirty_cpu, DCQ}, {ets_table_count, length(ets:all())}, {context_switches, element(1, statistics(context_switches))}, {reductions, element(1, statistics(reductions))}, @@ -287,3 +290,13 @@ message_queues(Registered) -> {Type, Length} = process_info(whereis(Name), Type), {Name, Length} end, Registered). + +%% Workaround for https://bugs.erlang.org/browse/ERL-1355 +run_queues() -> + case erlang:system_info(dirty_cpu_schedulers) > 0 of + false -> + {statistics(run_queue), 0}; + true -> + [DCQ | SQs] = lists:reverse(statistics(run_queue_lengths)), + {lists:sum(SQs), DCQ} + end. |