mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-25 07:07:52 +01:00
Implement straightforward overload general metrics.
- OOM metric - onionskin overload metric - DNS timeout metric
This commit is contained in:
parent
0a5ecb3342
commit
f493a12e89
3 changed files with 29 additions and 9 deletions
|
@ -83,6 +83,7 @@
|
||||||
#include "feature/nodelist/routerlist.h"
|
#include "feature/nodelist/routerlist.h"
|
||||||
#include "core/or/scheduler.h"
|
#include "core/or/scheduler.h"
|
||||||
#include "feature/hs/hs_metrics.h"
|
#include "feature/hs/hs_metrics.h"
|
||||||
|
#include "feature/stats/rephist.h"
|
||||||
|
|
||||||
#include "core/or/cell_st.h"
|
#include "core/or/cell_st.h"
|
||||||
#include "core/or/cell_queue_st.h"
|
#include "core/or/cell_queue_st.h"
|
||||||
|
@ -2720,6 +2721,9 @@ cell_queues_check_size(void)
|
||||||
if (alloc >= get_options()->MaxMemInQueues_low_threshold) {
|
if (alloc >= get_options()->MaxMemInQueues_low_threshold) {
|
||||||
last_time_under_memory_pressure = approx_time();
|
last_time_under_memory_pressure = approx_time();
|
||||||
if (alloc >= get_options()->MaxMemInQueues) {
|
if (alloc >= get_options()->MaxMemInQueues) {
|
||||||
|
/* Note this overload down */
|
||||||
|
rep_hist_note_overload(OVERLOAD_GENERAL);
|
||||||
|
|
||||||
/* If we're spending over 20% of the memory limit on hidden service
|
/* If we're spending over 20% of the memory limit on hidden service
|
||||||
* descriptors, free them until we're down to 10%. Do the same for geoip
|
* descriptors, free them until we're down to 10%. Do the same for geoip
|
||||||
* client cache. */
|
* client cache. */
|
||||||
|
|
|
@ -63,6 +63,7 @@
|
||||||
#include "feature/relay/dns.h"
|
#include "feature/relay/dns.h"
|
||||||
#include "feature/relay/router.h"
|
#include "feature/relay/router.h"
|
||||||
#include "feature/relay/routermode.h"
|
#include "feature/relay/routermode.h"
|
||||||
|
#include "feature/stats/rephist.h"
|
||||||
#include "lib/crypt_ops/crypto_rand.h"
|
#include "lib/crypt_ops/crypto_rand.h"
|
||||||
#include "lib/evloop/compat_libevent.h"
|
#include "lib/evloop/compat_libevent.h"
|
||||||
#include "lib/sandbox/sandbox.h"
|
#include "lib/sandbox/sandbox.h"
|
||||||
|
@ -1547,6 +1548,16 @@ evdns_callback(int result, char type, int count, int ttl, void *addresses,
|
||||||
|
|
||||||
tor_addr_make_unspec(&addr);
|
tor_addr_make_unspec(&addr);
|
||||||
|
|
||||||
|
/* Note down any DNS errors to the statistics module */
|
||||||
|
if (result == DNS_ERR_TIMEOUT) {
|
||||||
|
/* libevent timed out while resolving a name. However, because libevent
|
||||||
|
* handles retries and timeouts internally, this means that all attempts of
|
||||||
|
* libevent timed out. If we wanted to get more granular information about
|
||||||
|
* individual libevent attempts, we would have to implement our own DNS
|
||||||
|
* timeout/retry logic */
|
||||||
|
rep_hist_note_overload(OVERLOAD_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
/* Keep track of whether IPv6 is working */
|
/* Keep track of whether IPv6 is working */
|
||||||
if (type == DNS_IPv6_AAAA) {
|
if (type == DNS_IPv6_AAAA) {
|
||||||
if (result == DNS_ERR_TIMEOUT) {
|
if (result == DNS_ERR_TIMEOUT) {
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "core/or/circuitlist.h"
|
#include "core/or/circuitlist.h"
|
||||||
#include "core/or/onion.h"
|
#include "core/or/onion.h"
|
||||||
#include "feature/nodelist/networkstatus.h"
|
#include "feature/nodelist/networkstatus.h"
|
||||||
|
#include "feature/stats/rephist.h"
|
||||||
|
|
||||||
#include "core/or/or_circuit_st.h"
|
#include "core/or/or_circuit_st.h"
|
||||||
|
|
||||||
|
@ -163,15 +164,19 @@ onion_pending_add(or_circuit_t *circ, create_cell_t *onionskin)
|
||||||
#define WARN_TOO_MANY_CIRC_CREATIONS_INTERVAL (60)
|
#define WARN_TOO_MANY_CIRC_CREATIONS_INTERVAL (60)
|
||||||
static ratelim_t last_warned =
|
static ratelim_t last_warned =
|
||||||
RATELIM_INIT(WARN_TOO_MANY_CIRC_CREATIONS_INTERVAL);
|
RATELIM_INIT(WARN_TOO_MANY_CIRC_CREATIONS_INTERVAL);
|
||||||
char *m;
|
if (onionskin->handshake_type == ONION_HANDSHAKE_TYPE_NTOR) {
|
||||||
if (onionskin->handshake_type == ONION_HANDSHAKE_TYPE_NTOR &&
|
char *m;
|
||||||
(m = rate_limit_log(&last_warned, approx_time()))) {
|
/* Note this ntor onionskin drop as an overload */
|
||||||
log_warn(LD_GENERAL,
|
rep_hist_note_overload(OVERLOAD_GENERAL);
|
||||||
"Your computer is too slow to handle this many circuit "
|
if ((m = rate_limit_log(&last_warned, approx_time()))) {
|
||||||
"creation requests! Please consider using the "
|
log_warn(LD_GENERAL,
|
||||||
"MaxAdvertisedBandwidth config option or choosing a more "
|
"Your computer is too slow to handle this many circuit "
|
||||||
"restricted exit policy.%s",m);
|
"creation requests! Please consider using the "
|
||||||
tor_free(m);
|
"MaxAdvertisedBandwidth config option or choosing a more "
|
||||||
|
"restricted exit policy.%s",
|
||||||
|
m);
|
||||||
|
tor_free(m);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tor_free(tmp);
|
tor_free(tmp);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Add table
Reference in a new issue