aboutsummaryrefslogtreecommitdiffstats
path: root/lib/observer
diff options
context:
space:
mode:
authorSiri Hansen <[email protected]>2013-03-14 11:06:27 +0100
committerSiri Hansen <[email protected]>2013-03-14 11:06:27 +0100
commit8e44167cb97ccf51a8ee3ca97449613ef3300514 (patch)
tree7e4dcabf0b3a431a9fd05c48d3f35285095195f9 /lib/observer
parente2ee1f79a7d0ffe02eab4da90d655e77893d1666 (diff)
parent6ab4b1c2a7a5a89dd8ea4094bd7fb4c23745acfc (diff)
downloadotp-8e44167cb97ccf51a8ee3ca97449613ef3300514.tar.gz
otp-8e44167cb97ccf51a8ee3ca97449613ef3300514.tar.bz2
otp-8e44167cb97ccf51a8ee3ca97449613ef3300514.zip
Merge branch 'siri/observer/misc-bugs/OTP-10894' into maint
* siri/observer/misc-bugs/OTP-10894: [observer] Extend timer to allow trace msgs to arrive over tcp/ip [observer] Kill slave node between tests in etop_SUITE [observer] Accept current function for a process to be 'undefined' on hipe [observer] Improve measurement of CPU utilization in etop [observer] Fix non tail-recusive loop when measuring scheduler utilization
Diffstat (limited to 'lib/observer')
-rw-r--r--lib/observer/src/etop.erl35
-rw-r--r--lib/observer/src/etop_gui.erl9
-rw-r--r--lib/observer/test/etop_SUITE.erl24
-rw-r--r--lib/observer/test/ttb_SUITE.erl5
-rw-r--r--lib/observer/test/ttb_helper.erl2
5 files changed, 59 insertions, 16 deletions
diff --git a/lib/observer/src/etop.erl b/lib/observer/src/etop.erl
index 428757e5ce..2610060eae 100644
--- a/lib/observer/src/etop.erl
+++ b/lib/observer/src/etop.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -325,13 +325,40 @@ loadinfo(SysI) ->
#etop_info{n_procs = Procs,
run_queue = RQ,
now = Now,
- wall_clock = {_, WC},
- runtime = {_, RT}} = SysI,
- Cpu = round(100*RT/WC),
+ wall_clock = WC,
+ runtime = RT} = SysI,
+ Cpu = calculate_cpu_utilization(WC,RT),
Clock = io_lib:format("~2.2.0w:~2.2.0w:~2.2.0w",
tuple_to_list(element(2,calendar:now_to_datetime(Now)))),
{Cpu,Procs,RQ,Clock}.
+calculate_cpu_utilization({_,WC},{_,RT}) ->
+ %% Old version of observer_backend, using statistics(wall_clock)
+ %% and statistics(runtime)
+ case {WC,RT} of
+ {0,0} ->
+ 0;
+ {0,_} ->
+ 100;
+ _ ->
+ round(100*RT/WC)
+ end;
+calculate_cpu_utilization(_,undefined) ->
+ %% First time collecting - no cpu utilization has been measured
+ %% since scheduler_wall_time flag is not yet on
+ 0;
+calculate_cpu_utilization(_,RTInfo) ->
+ %% New version of observer_backend, using statistics(scheduler_wall_time)
+ Sum = lists:foldl(fun({_,A,T},{AAcc,TAcc}) -> {A+AAcc,T+TAcc} end,
+ {0,0},
+ RTInfo),
+ case Sum of
+ {0,0} ->
+ 0;
+ {Active,Total} ->
+ round(100*Active/Total)
+ end.
+
meminfo(MemI, [Tag|Tags]) ->
[round(get_mem(Tag, MemI)/1024)|meminfo(MemI, Tags)];
meminfo(_MemI, []) -> [].
diff --git a/lib/observer/src/etop_gui.erl b/lib/observer/src/etop_gui.erl
index f5cc0deb38..3971646abc 100644
--- a/lib/observer/src/etop_gui.erl
+++ b/lib/observer/src/etop_gui.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -276,7 +276,12 @@ clear_lines(From, To, Grid) ->
end.
formatmfa({M, F, A}) ->
- io_lib:format("~w:~w/~w",[M, F, A]).
+ io_lib:format("~w:~w/~w",[M, F, A]);
+formatmfa(Other) ->
+ %% E.g. when running hipe - the current_function for some
+ %% processes will be 'undefined'
+ io_lib:format("~w",[Other]).
+
makegridlines([#etop_proc_info{pid=Pid,
mem=Mem,
diff --git a/lib/observer/test/etop_SUITE.erl b/lib/observer/test/etop_SUITE.erl
index 06577f82cc..6ce3ea59cf 100644
--- a/lib/observer/test/etop_SUITE.erl
+++ b/lib/observer/test/etop_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -21,7 +21,8 @@
%% Test functions
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,text/1,text_tracing_off/1]).
+ init_per_group/2,end_per_group/2]).
+-export([text/1,text/2,text_tracing_off/1,text_tracing_off/2]).
-export([init_per_testcase/2, end_per_testcase/2]).
-include_lib("test_server/include/test_server.hrl").
@@ -31,7 +32,10 @@
init_per_testcase(_Case, Config) ->
?line Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
-end_per_testcase(_Case, Config) ->
+end_per_testcase(Case, Config) ->
+ try apply(?MODULE,Case,[cleanup,Config])
+ catch error:undef -> ok
+ end,
Dog=?config(watchdog, Config),
?t:timetrap_cancel(Dog),
ok.
@@ -82,9 +86,12 @@ text() ->
?line timer:sleep(3000),
?line etop:config(sort,msg_q),
?line timer:sleep(3000),
- ?line etop:stop(),
- ?line ?t:stop_node(Node),
ok.
+text(cleanup,_Config) ->
+ etop:stop(),
+ {ok,Host} = inet:gethostname(),
+ Node = list_to_atom("node2@"++Host),
+ ?t:stop_node(Node).
text_tracing_off(suite) ->
[];
@@ -111,7 +118,10 @@ text_tracing_off(Config) when is_list(Config) ->
?line timer:sleep(3000),
?line etop:config(sort,runtime), % this should not crash, but has no effect
?line timer:sleep(3000),
- ?line etop:stop(),
- ?line ?t:stop_node(Node),
ok.
+text_tracing_off(cleanup,_Config) ->
+ etop:stop(),
+ {ok,Host} = inet:gethostname(),
+ Node = list_to_atom("node2@"++Host),
+ ?t:stop_node(Node).
diff --git a/lib/observer/test/ttb_SUITE.erl b/lib/observer/test/ttb_SUITE.erl
index 695d41b48a..f3fcd9f283 100644
--- a/lib/observer/test/ttb_SUITE.erl
+++ b/lib/observer/test/ttb_SUITE.erl
@@ -1,7 +1,8 @@
+%%
%% %CopyrightBegin%
%%
%%
-%% Copyright Ericsson AB 2002-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -57,7 +58,7 @@ init_per_testcase(Case, Config) ->
catch error:undef -> ok
end,
[{watchdog, Dog}|Config].
-end_per_testcase(Case, Config) ->
+end_per_testcase(_Case, Config) ->
%% try apply(?MODULE,Case,[cleanup,Config])
%% catch error:undef -> ok
%% end,
diff --git a/lib/observer/test/ttb_helper.erl b/lib/observer/test/ttb_helper.erl
index 76b06cd3ce..05f6d73aef 100644
--- a/lib/observer/test/ttb_helper.erl
+++ b/lib/observer/test/ttb_helper.erl
@@ -70,7 +70,7 @@ msgs(N) ->
msgs_ip(N) ->
[c(client, put, [test_msg]) || _ <- lists:seq(1, N)],
s(server, received, [a,b]),
- timer:sleep(200). %% allow trace messages to arrive over tcp/ip
+ timer:sleep(500). %% allow trace messages to arrive over tcp/ip
run() ->
ttb({local, "A"}),