MINOR: activity: make "show profiling" support a few arguments
These ones allow to limit the output to only certain sections and/or a number of lines per dump.
This commit is contained in:
parent
637d85a93e
commit
42712cb6d4
|
@ -2480,11 +2480,20 @@ show pools
|
||||||
as the SIGQUIT when running in foreground except that it does not flush
|
as the SIGQUIT when running in foreground except that it does not flush
|
||||||
the pools.
|
the pools.
|
||||||
|
|
||||||
show profiling
|
show profiling [{all | status | tasks | memory}] [max_lines]
|
||||||
Dumps the current profiling settings, one per line, as well as the command
|
Dumps the current profiling settings, one per line, as well as the command
|
||||||
needed to change them. When tasks profiling is enabled, some per-function
|
needed to change them. When tasks profiling is enabled, some per-function
|
||||||
statistics collected by the scheduler will also be emitted, with a summary
|
statistics collected by the scheduler will also be emitted, with a summary
|
||||||
covering the number of calls, total/avg CPU time and total/avg latency.
|
covering the number of calls, total/avg CPU time and total/avg latency. When
|
||||||
|
memory profiling is enabled, some information such as the number of
|
||||||
|
allocations/releases and their sizes will be reported. It is possible to
|
||||||
|
limit the dump to only the profiling status, the tasks, or the memory
|
||||||
|
profiling by specifying the respective keywords; by default all profiling
|
||||||
|
information are dumped. It is also possible to limit the number of lines
|
||||||
|
of output of each category by specifying a numeric limit. Please note that
|
||||||
|
profiling is essentially aimed at developers since it gives hints about
|
||||||
|
where CPU cycles or memory are wasted in the code. There is nothing useful
|
||||||
|
to monitor there.
|
||||||
|
|
||||||
show resolvers [<resolvers section id>]
|
show resolvers [<resolvers section id>]
|
||||||
Dump statistics for the given resolvers section, or all resolvers sections
|
Dump statistics for the given resolvers section, or all resolvers sections
|
||||||
|
|
|
@ -552,6 +552,40 @@ static int cli_io_handler_show_profiling(struct appctx *appctx)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* parse a "show profiling" command. It returns 1 on failure, 0 if it starts to dump. */
|
||||||
|
static int cli_parse_show_profiling(char **args, char *payload, struct appctx *appctx, void *private)
|
||||||
|
{
|
||||||
|
if (!cli_has_level(appctx, ACCESS_LVL_ADMIN))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if (strcmp(args[2], "all") == 0) {
|
||||||
|
appctx->ctx.cli.i0 = 0; // will cycle through 0,1,2; default
|
||||||
|
args++;
|
||||||
|
}
|
||||||
|
else if (strcmp(args[2], "status") == 0) {
|
||||||
|
appctx->ctx.cli.i0 = 4; // will visit status only
|
||||||
|
args++;
|
||||||
|
}
|
||||||
|
else if (strcmp(args[2], "tasks") == 0) {
|
||||||
|
appctx->ctx.cli.i0 = 5; // will visit tasks only
|
||||||
|
args++;
|
||||||
|
}
|
||||||
|
else if (strcmp(args[2], "memory") == 0) {
|
||||||
|
appctx->ctx.cli.i0 = 6; // will visit memory only
|
||||||
|
args++;
|
||||||
|
}
|
||||||
|
else if (*args[2] && !isdigit((unsigned char)*args[2]))
|
||||||
|
return cli_err(appctx, "Expects either 'all', 'status', 'tasks' or 'memory'.\n");
|
||||||
|
|
||||||
|
if (*args[2]) {
|
||||||
|
/* Second arg may set a limit to number of entries to dump; default is
|
||||||
|
* not set and means no limit.
|
||||||
|
*/
|
||||||
|
appctx->ctx.cli.o0 = atoi(args[2]);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* This function scans all threads' run queues and collects statistics about
|
/* This function scans all threads' run queues and collects statistics about
|
||||||
* running tasks. It returns 0 if the output buffer is full and it needs to be
|
* running tasks. It returns 0 if the output buffer is full and it needs to be
|
||||||
* called again, otherwise non-zero.
|
* called again, otherwise non-zero.
|
||||||
|
@ -704,7 +738,7 @@ INITCALL1(STG_REGISTER, cfg_register_keywords, &cfg_kws);
|
||||||
|
|
||||||
/* register cli keywords */
|
/* register cli keywords */
|
||||||
static struct cli_kw_list cli_kws = {{ },{
|
static struct cli_kw_list cli_kws = {{ },{
|
||||||
{ { "show", "profiling", NULL }, "show profiling : show CPU profiling options", NULL, cli_io_handler_show_profiling, NULL },
|
{ { "show", "profiling", NULL }, "show profiling : show CPU profiling options", cli_parse_show_profiling, cli_io_handler_show_profiling, NULL },
|
||||||
{ { "show", "tasks", NULL }, "show tasks : show running tasks", NULL, cli_io_handler_show_tasks, NULL },
|
{ { "show", "tasks", NULL }, "show tasks : show running tasks", NULL, cli_io_handler_show_tasks, NULL },
|
||||||
{ { "set", "profiling", NULL }, "set profiling : enable/disable resource profiling", cli_parse_set_profiling, NULL },
|
{ { "set", "profiling", NULL }, "set profiling : enable/disable resource profiling", cli_parse_set_profiling, NULL },
|
||||||
{{},}
|
{{},}
|
||||||
|
|
Loading…
Reference in New Issue