При поиске узла мы показываем янтарную точку рядом с ником узла, если он перегружен. Это означает, что сработала одна или несколько из следующих метрик нагрузки:

Обратите внимание, что если узел достигает перегруженного состояния, мы выводим сигнал перегрузки в течение 72 часов после восстановления узла.

Если Вы заметили, что Ваш узел перегружен, пожалуйста:

  1. Проверьте https://status.torproject.org/ на наличие выявленных проблем в категории "Tor network".

  2. Рассмотрите возможность [настройки sysctl вашей системы] (#tuning-sysctl-for-network-memory-and-cpu-load) для сети, памяти и загрузки ЦП.

  3. Рассмотрите возможность включения 'MetricsPort', чтобы понять, что происходит.

Настройка 'sysctl' для сети, памяти и загрузки процессора

Исчерпание TCP-порта

В случае исчерпания TCP-порта рассмотрите возможность расширения диапазона локальных портов. Это можно сделать с помощью

# sysctl -w net.ipv4.ip_local_port_range="15000 64000"

или

# echo 15000 64000 > /proc/sys/net/ipv4/ip_local_port_range

Имейте в виду, что приведенная выше настройка sysctl не является постоянной и будет утрачена при перезапуске. Чтобы сделать ее постоянной, Вам следует добавить конфигурацию в /etc/sysctl.conf или в файл /etc/sysctl.d/.

MetricsPort

Чтобы понять состояние узла Tor и сети Tor, жизненно важно предоставить и иметь доступ к метрикам узла. Информация о перегрузке узла была добавлена в дескрипторы узла с версии 0.4.6+, но только после tor >= 0.4.7.1-alpha был доступен интерфейс к базовым метрикам ретрансляции: порт метрик.

Включение MetricsPort

Tor предоставляет доступ к порту метрик через опцию конфигурации torrc под названием MetricsPort.

Важно понимать, что публичное раскрытие MetricsPort tor опасно для пользователей сети Tor, поэтому этот порт не включен по умолчанию, и его доступ должен регулироваться политикой доступа. Пожалуйста, примите дополнительные меры предосторожности при открытии этого порта и закройте его при завершении отладки.

Предположим, что вы единственный пользователь на сервере, на котором запущен узел Tor. Вы можете включить порт метрик, добавив это в файл torrc:

MetricsPort 127.0.0.1:9035
MetricsPortPolicy accept 127.0.0.1

И тогда вы сможете легко получить метрики с помощью:

# curl http://127.0.0.1:9035/metrics

в формате Prometheus по умолчанию.

Примечание: Каждый пользователь на этом сервере сможет получить доступ к этим метрикам узла в приведенном выше примере. В общем, установите очень строгую политику доступа с помощью MetricsPortPolicyи рассмотрите возможность использования функций брандмауэра ваших операционных систем для глубокой защиты.

Для более подробного объяснения о MetricsPort и MetricsPortPolicy см. справочную страницу tor.

Выходные данные MetricsPort

Вот пример того, что будет выдаваться при включении MetricsPort:

# 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="tor_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="tor_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="tor_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

Давайте выясним, что на самом деле означают некоторые из этих строк:

tor_relay_load_onionskins_total{type="ntor",action="dropped"} 0

Когда узел начинает видеть "dropped", обычно это проблема ЦП/ОЗУ.

Tor, к сожалению, является однопоточным,за исключением случаев, когда обрабатываются «луковые оболочки». "Onion skins" (луковые оболочки) - это криптографическая работа, которая должна быть выполнена на знаменитых "onion layers" (луковых слоях) в каждой цепи.

Когда tor обрабатывает слои, мы используем пул потоков и передаем всю эту работу этому пулу. Может случиться так, что этот пул начнет сбоить из-за нагрузки на память или на процессор, и это вызовет состояние перегрузки.

Это, скорее всего, будет выявлено, если ваш сервер работает на полную мощность.

tor_relay_exit_dns_error_total{...}

Любой счетчик в области "*_dns_error_total" указывает на потенциальную проблему, связанную с DNS. Однако в процессе выпуска релиза 0.4.7 мы поняли, что ошибки DNS слишком зашумлены и содержат много ложных срабатываний, чтобы быть полезными для целей отчетности о перегрузке. Поэтому мы больше не используем их для этой цели, начиная с релизов 0.4.6.9 и 0.4.7.4-alpha. Тем не менее, мы по-прежнему сохраняем метрики DNS, чтобы дать оператору узла представление о том, что происходит с его узлом.

Проблемы и ошибки с тайм-аутом DNS относятся только к выходным узлам.

tor_relay_load_oom_bytes_total{...}

Вызов Out-Of-Memory указывает на проблему с RAM. Узлу требуется больше RAM или имеется утечка памяти. Если вы заметили, что в процессе tor присутствует утечка памяти, пожалуйста, сообщите о проблеме либо через Tor gitLab, либо отправив электронное письмо в список рассылки tor-relays.

Tor имеет свой собственный обработчик OOM, и он запускается в случае, если достигнуто 75% от общей памяти, которую tor считает доступной. Таким образом, предположим, что tor думает, что ему доступно в общей сложности 2 ГБ памяти, тогда при использовании 1,5 ГБ памяти он начнет её освобождать. Это считается состоянием перегрузки.

Чтобы оценить объем доступной памяти, при запуске tor будет использовать MaxMemInQueues или, если он не установлен, посмотрит на общую RAM, доступную в системе, и применит следующий алгоритм:

    if RAM >= 8GB {
      memory = RAM * 40%
    } else {
      memory = RAM * 75%
    }
    /* Capped. */
    memory = min(memory, 8GB) -> [8GB on 64bit and 2GB on 32bit)
    /* Минимальное значение. */
    memory = max(250MB, memory)

Чтобы избежать состояния перегрузки, мы рекомендуем запускать узел с объёмом RAM более 2 ГБ на 64bit. Рекомендуется 4 ГБ, хотя, конечно, не помешает добавить больше RAM, если у вас имеется такая возможность.

Важно заметить, что сам tor может быть завершён обработчиком OOM ОС. Поскольку tor использует всю доступную ему в системе память при запуске, в случае, если в общей системе запущено много других приложений, работающих с использованием RAM, он в конечном итоге потребляет слишком много памяти. В этом случае обработчик OOM ОС могла бы завершить tor, даже при отсутствии перегрузки памяти tor.

tor_relay_load_socket_total

Эти строки указывают на то, что у узла заканчиваются сокеты. Решение заключается в том, чтобы увеличить ulimit -n для процесса tor.

tor_relay_load_tcp_exhaustion_total

Эти строки указывают на то, что у узла заканчиваются TCP-порты.

Попробуйте настроить sysctl как описано выше.

tor_relay_load_global_rate_limit_reached_total

Если этот счетчик увеличивается на некоторое заметное значение за короткий промежуток времени, то узел перегружен. Скорее всего, он используется в качестве сторожа большим onion-ресурсом или для осуществляемой DDoS в сети.

Если ваш узел по-прежнему перегружен и вы не знаете почему, свяжитесь с network-report@torproject.org. Вы можете зашифровать свою электронную почту с помощью ключа network-report OpenPGP.