mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 10:18:25 +00:00
Add information on process-forking for TCP connections to metrics.
Add the relevant information to the metrics and to the output of dump_cache() (which is called when dnsmasq receives SIGUSR1). Hence, users not collecting metrics will still be able to troubleshoot with SIGUSR1. In addition to the current usage, dump_cache() contains the information on the highest usage since it was last called.
This commit is contained in:
committed by
Simon Kelley
parent
744231d995
commit
69877f565a
@@ -2303,7 +2303,7 @@ they expired in order to make room for new names and the total number
|
||||
of names that have been inserted into the cache. The number of cache hits and
|
||||
misses and the number of authoritative queries answered are also given. For each upstream
|
||||
server it gives the number of queries sent, and the number which
|
||||
resulted in an error. In
|
||||
resulted in an error. It also gives information on the number of forks for TCP connections. In
|
||||
.B --no-daemon
|
||||
mode or when full logging is enabled (\fB--log-queries\fP), a complete dump of the
|
||||
contents of the cache is made.
|
||||
|
||||
@@ -1895,7 +1895,12 @@ void dump_cache(time_t now)
|
||||
#endif
|
||||
|
||||
blockdata_report();
|
||||
|
||||
my_syslog(LOG_INFO, _("child processes for TCP requests: in use %zu, highest since last SIGUSR1 %zu, max allowed %zu."),
|
||||
daemon->metrics[METRIC_TCP_CONNECTIONS],
|
||||
daemon->max_procs_used,
|
||||
daemon->max_procs);
|
||||
daemon->max_procs_used = daemon->metrics[METRIC_TCP_CONNECTIONS];
|
||||
|
||||
/* sum counts from different records for same server */
|
||||
for (serv = daemon->servers; serv; serv = serv->next)
|
||||
serv->flags &= ~SERV_MARK;
|
||||
|
||||
@@ -1534,7 +1534,12 @@ static void async_event(int pipe, time_t now)
|
||||
else if (daemon->port != 0)
|
||||
for (i = 0 ; i < daemon->max_procs; i++)
|
||||
if (daemon->tcp_pids[i] == p)
|
||||
daemon->tcp_pids[i] = 0;
|
||||
{
|
||||
daemon->tcp_pids[i] = 0;
|
||||
/* tcp_pipes == -1 && tcp_pids == 0 required to free slot */
|
||||
if (daemon->tcp_pipes[i] == -1)
|
||||
daemon->metrics[METRIC_TCP_CONNECTIONS]--;
|
||||
}
|
||||
break;
|
||||
|
||||
#if defined(HAVE_SCRIPT)
|
||||
@@ -1844,6 +1849,9 @@ static void check_dns_listeners(time_t now)
|
||||
{
|
||||
close(daemon->tcp_pipes[i]);
|
||||
daemon->tcp_pipes[i] = -1;
|
||||
/* tcp_pipes == -1 && tcp_pids == 0 required to free slot */
|
||||
if (daemon->tcp_pids[i] == 0)
|
||||
daemon->metrics[METRIC_TCP_CONNECTIONS]--;
|
||||
}
|
||||
|
||||
for (listener = daemon->listeners; listener; listener = listener->next)
|
||||
@@ -1972,6 +1980,9 @@ static void check_dns_listeners(time_t now)
|
||||
/* i holds index of free slot */
|
||||
daemon->tcp_pids[i] = p;
|
||||
daemon->tcp_pipes[i] = pipefd[0];
|
||||
daemon->metrics[METRIC_TCP_CONNECTIONS]++;
|
||||
if (daemon->metrics[METRIC_TCP_CONNECTIONS] > daemon->max_procs_used)
|
||||
daemon->max_procs_used = daemon->metrics[METRIC_TCP_CONNECTIONS];
|
||||
}
|
||||
close(confd);
|
||||
|
||||
|
||||
@@ -1314,6 +1314,7 @@ extern struct daemon {
|
||||
int dumpfd;
|
||||
#endif
|
||||
int max_procs;
|
||||
uint max_procs_used;
|
||||
} *daemon;
|
||||
|
||||
struct server_details {
|
||||
|
||||
@@ -39,6 +39,7 @@ const char * metric_names[] = {
|
||||
"leases_pruned_4",
|
||||
"leases_allocated_6",
|
||||
"leases_pruned_6",
|
||||
"tcp_connections",
|
||||
};
|
||||
|
||||
const char* get_metric_name(int i) {
|
||||
|
||||
@@ -38,6 +38,7 @@ enum {
|
||||
METRIC_LEASES_PRUNED_4,
|
||||
METRIC_LEASES_ALLOCATED_6,
|
||||
METRIC_LEASES_PRUNED_6,
|
||||
METRIC_TCP_CONNECTIONS,
|
||||
|
||||
__METRIC_MAX,
|
||||
};
|
||||
|
||||
@@ -5855,6 +5855,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
|
||||
daemon->randport_limit = 1;
|
||||
daemon->host_index = SRC_AH;
|
||||
daemon->max_procs = MAX_PROCS;
|
||||
daemon->max_procs_used = 0;
|
||||
|
||||
/* See comment above make_servers(). Optimises server-read code. */
|
||||
mark_servers(0);
|
||||
|
||||
Reference in New Issue
Block a user