Mein Relay oder meine Brücke ist überlastet, was bedeutet das?
Bei der Relay-Suche zeigen wir einen gelben Punkt neben dem Relay-Spitznamen an, wenn dieser überlastet ist. Dies bedeutet, dass eine oder mehrere der folgenden Lastkennzahlen ausgelöst wurden:
- Jeder Tor-OOM-Aufruf aufgrund von Speicherlast
- Jede ntor Onionskin wird verworfen
- TCP Port-Ausschöpfung
- DNS Timeout erreicht
Wenn ein Relay einen überlasteten Zustand erreicht, zeigen wir dies 72 Stunden lang an, nachdem sich das Relay erholt hat.
Wenn du feststellst, dass dein Relay überlastet ist, bitte:
Überprüfe https://status.torproject.org/ auf alle bekannten Probleme in der Kategorie "Tor-Netzwerk".
Erwäge Tuning
sysctl
für dein System für Netzwerk, Speicher und CPU-Last.Ziehe in Erwägung,
MetricsPort
zu aktivieren, um zu verstehen, was vor sich geht.
sysctl
für dein System auf Netzwerk-, Speicher- und CPU-Last einstellen
TCP Port-Ausschöpfung
Wenn die TCP-Ports ausgeschöpft sind, solltest du deinen lokalen Portbereich erweitern Das kannst du tun mit
# sysctl -w net.ipv4.ip_local_port_range="15000 64000"
oder
# echo 15000 64000 > /proc/sys/net/ipv4/ip_local_port_range
DNS Timeout
Wenn DNS-Zeitüberschreitungen auftreten, solltest du untersuchen, ob es sich um ein Netzwerk- oder ein Resolver-Problem handelt.
Unter Linux gibt es in der Datei resolve.conf
eine Option, um eine Zeitüberschreitung festzulegen:
timeout:n
Legt die Zeitspanne fest, die der Resolver auf eine Antwort von einem entfernten
Nameserver wartet, bevor er die Abfrage über einen anderen Nameserver erneut versucht.
Dies ist nicht unbedingt die Gesamtzeit, die für einen Resolver-API-Aufruf benötigt wird, und es gibt keine Garantie
dass ein einzelner Resolver-API-Aufruf einem einzelnen Timeout entspricht.
Gemessen in Sekunden, ist die Voreinstellung RES_TIMEOUT (derzeit 5, siehe <resolv.h>).
Der Wert für diese Option wird stillschweigend auf 30 begrenzt.
Siehe $ man resolve.conf
für weitere Informationen.
MetricsPort
Ziehe in Erwägung, MetricsPort
zu aktivieren, um zu verstehen, was vor sich geht.
MetricsPort-Daten für Relays wurden ab Version >= 0.4.7.1-alpha eingeführt, während die Überlastungsdaten seit 0.4.6+ zu den Relay-Deskriptoren hinzugefügt worden sind.
Es ist wichtig zu verstehen, dass die Veröffentlichung von tor MetricsPort für die Nutzer des Tor-Netzwerks gefährlich ist.
Bitte sei besonders vorsichtig, wenn du diesen Port öffnest, und schließe ihn, wenn du mit der Fehlersuche fertig bist.
Lege eine sehr strenge Zugriffsrichtlinie mit MetricsPortPolicy
fest und erwäge die Verwendung der Firewall-Funktionen deines Betriebssystems für eine umfassende Verteidigung.
Hier ist ein Beispiel für die Ausgabe, die das Aktivieren von MetricsPort
erzeugen wird:
# HELP tor_relay_load_onionskins_total Total number of onionskins handled
# TYPE tor_relay_load_onionskins_total counter
tor_relay_load_onionskins_total{type="tap",action="processed"} 0
tor_relay_load_onionskins_total{type="tap",action="dropped"} 0
tor_relay_load_onionskins_total{type="fast",action="processed"} 0
tor_relay_load_onionskins_total{type="fast",action="dropped"} 0
tor_relay_load_onionskins_total{type="ntor",action="processed"} 0
tor_relay_load_onionskins_total{type="ntor",action="dropped"} 0
# HELP tor_relay_exit_dns_query_total Total number of DNS queries done by this relay
# TYPE tor_relay_exit_dns_query_total counter
tor_relay_exit_dns_query_total{record="A"} 0
tor_relay_exit_dns_query_total{record="PTR"} 0
tor_relay_exit_dns_query_total{record="AAAA"} 0
# HELP tor_relay_exit_dns_error_total Total number of DNS errors encountered by this relay
# TYPE tor_relay_exit_dns_error_total counter
tor_relay_exit_dns_error_total{record="A",reason="success"} 0
tor_relay_exit_dns_error_total{record="A",reason="format"} 0
tor_relay_exit_dns_error_total{record="A",reason="serverfailed"} 0
tor_relay_exit_dns_error_total{record="A",reason="notexist"} 0
tor_relay_exit_dns_error_total{record="A",reason="notimpl"} 0
tor_relay_exit_dns_error_total{record="A",reason="refused"} 0
tor_relay_exit_dns_error_total{record="A",reason="truncated"} 0
tor_relay_exit_dns_error_total{record="A",reason="unknown"} 0
tor_relay_exit_dns_error_total{record="A",reason="timeout"} 0
tor_relay_exit_dns_error_total{record="A",reason="shutdown"} 0
tor_relay_exit_dns_error_total{record="A",reason="cancel"} 0
tor_relay_exit_dns_error_total{record="A",reason="nodata"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="success"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="format"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="serverfailed"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="notexist"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="notimpl"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="refused"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="truncated"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="unknown"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="timeout"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="shutdown"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="cancel"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="nodata"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="success"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="format"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="serverfailed"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="notexist"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="notimpl"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="refused"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="truncated"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="unknown"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="timeout"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="shutdown"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="cancel"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="nodata"} 0
# HELP tor_relay_load_tcp_exhaustion_total Total number of times we ran out of TCP ports
# TYPE tor_relay_load_tcp_exhaustion_total counter
tor_relay_load_tcp_exhaustion_total 0
# HELP tor_relay_load_socket_total Total number of sockets
# TYPE tor_relay_load_socket_total gauge
tor_relay_load_socket_total{state="opened"} 135
tor_relay_load_socket_total 1048544
# HELP tor_relay_load_oom_bytes_total Total number of bytes the OOM has freed by subsystem
# TYPE tor_relay_load_oom_bytes_total counter
tor_relay_load_oom_bytes_total{subsys="cell"} 0
tor_relay_load_oom_bytes_total{subsys="dns"} 0
tor_relay_load_oom_bytes_total{subsys="geoip"} 0
tor_relay_load_oom_bytes_total{subsys="hsdir"} 0
# HELP tor_relay_load_global_rate_limit_reached_total Total number of global connection bucket limit reached
# TYPE tor_relay_load_global_rate_limit_reached_total counter
tor_relay_load_global_rate_limit_reached_total{side="read"} 0
tor_relay_load_global_rate_limit_reached_total{side="write"} 0
Lass uns herausfinden, was einige dieser Zeilen tatsächlich bedeuten:
tor_relay_load_onionskins_total{type="ntor",action="dropped"} 0
Wenn ein Relay anfängt "dropped" zu sehen, handelt es sich in der Regel um ein CPU/RAM-Problem.
Tor ist leider single threaded außer wenn die "onion skins" verarbeitet werden. Die "Onion Skins" sind die kryptographischen Arbeiten, die an den berühmten "Onion Layers" in jedem Kanal durchgeführt werden müssen.
Wenn Tor die Layers verarbeitet, verwenden wir einen Thread-Pool und lagern die gesamte Arbeit an diesen Pool aus. Es kann vorkommen, dass dieser Pool aufgrund von Speicher- oder CPU-Last die Arbeit einstellt, was zu einem Überlastungszustand führt.
Wenn dein Server ausgelastet ist, wird dies wahrscheinlich ausgelöst.
tor_relay_exit_dns_error_total{...}
Jeder Zahlenwert im Bereich "*_dns_error_total" weist auf ein DNS-Problem hin.
Probleme mit DNS-Zeitüberschreitungen betreffen nur Exit-Knoten. Wenn Tor anfängt, DNS-Zeitüberschreitungen zu beobachten, erhältst du die Überlastungsmeldung. Dies liegt nicht unbedingt daran, dass dein Relay ressourcenmäßig überlastet ist, sondern signalisiert ein Problem im Netzwerk.
DNS-Timeouts an den Exits sind ein großes UX-Problem für Tor-Nutzer. Deshalb müssen die Exit-Betreiber diese Probleme wirklich angehen, um dem Netz zu helfen.
tor_relay_load_oom_bytes_total{...}
Eine Out-Of-Memory-Meldung weist auf ein RAM-Problem hin. Möglicherweise benötigt das Relay mehr RAM oder es treten Speicherverluste auf. Wenn du feststellst, dass der Tor-Prozess Speicherverluste hat, melde das Problem bitte entweder über Tor gitLab oder schicke eine E-Mail an die Tor-Relays Mailingliste.
Tor hat einen eigenen OOM-Handler, der aufgerufen wird, wenn 75% des Speichers, den Tor für verfügbar hält, erreicht sind. Angenommen, Tor denkt, dass es insgesamt 2 GB nutzen kann, dann wird es bei 1,5 GB Speicherverbrauch anfangen, Speicher zu räumen. Dies wird als Überlastungszustand angesehen.
Um die Menge des verfügbaren Speichers abzuschätzen, verwendet Tor beim Start MaxMemInQueues oder, falls es nicht eingestellt ist, den gesamten verfügbaren Arbeitsspeicher des Systems und wendet diesen Algorithmus an:
if RAM >= 8GB {
memory = RAM * 40%
} else {
memory = RAM * 75%
}
/* Capped. */
memory = min(memory, 8GB) -> [8GB on 64bit and 2GB on 32bit)
/* Minimum value. */
memory = max(250MB, memory)
Um einen überlasteten Zustand zu vermeiden, empfehlen wir, ein Relay mit mehr als 2GB RAM auf 64bit zu betreiben. 4 GB werden empfohlen, obwohl es natürlich nicht schadet, noch mehr RAM hinzuzufügen, wenn du kannst.
Man könnte meinen, dass Tor vom OS OOM-Handler selbst aufgerufen werden könnte. Da Tor beim Start den gesamten Arbeitsspeicher des Systems beansprucht, verbraucht es zu viel Arbeitsspeicher, wenn auf dem Gesamtsystem viele andere Anwendungen laufen, die den Arbeitsspeicher nutzen. In diesem Fall könnte das Betriebssystem Tor OOM, sogar ohne dass Tor Speicherlast bemerken würde.
tor_relay_load_socket_total
Diese Zeilen zeigen an, dass das Relay keine Sockets mehr hat.
Die Lösung ist, ulimit -n
für den Tor-Prozess zu erhöhen.
tor_relay_load_tcp_exhaustion_total
Diese Zeilen zeigen an, dass das Relay keine TCP-Ports mehr hat.
Versuche sysctl
wie oben beschrieben einzustellen.
tor_relay_load_global_rate_limit_reached_total
Wenn dieser Zähler über einen kurzen Zeitraum um einen merklichen Wert ansteigt, ist das Relay überlastet. Es wird wahrscheinlich von einem großen Onion-Dienst als Schutz verwendet oder für ein laufendes DDoS im Netzwerk.
Wenn dein Relay immer noch überlastet ist und du nicht weißt, warum, wende dich bitte an network-report@torproject.org. Du kannst deine E-Mail mit Network-Report OpenPGP Schlüssel verschlüsseln.