You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ch...@apache.org on 2020/09/23 21:05:55 UTC

[couchdb] branch main updated: Workaround dirty schedulers in run_queue stats (#3168)

This is an automated email from the ASF dual-hosted git repository.

chewbranca pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/couchdb.git


The following commit(s) were added to refs/heads/main by this push:
     new f190677  Workaround dirty schedulers in run_queue stats (#3168)
f190677 is described below

commit f1906774e727982621a1acd8961a7a0483314ffb
Author: Russell Branca <ch...@apache.org>
AuthorDate: Wed Sep 23 14:05:49 2020 -0700

    Workaround dirty schedulers in run_queue stats (#3168)
---
 src/chttpd/src/chttpd_node.erl | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/chttpd/src/chttpd_node.erl b/src/chttpd/src/chttpd_node.erl
index 1ca4bbd..0159672 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.