Диагностика

Что реально грузит Xray-ноду: протокол досмотра на цифрах

Эталон +1–2% нагрузки на 100 онлайн. Первым шагом — утечка gRPC к внутреннему API, дальше развилка: объём, соединения, churn или шаринг подписок.

9 мин чтения

Жалоба, от которой нельзя отмахнуться

«Нода грузится непропорционально числу юзеров» — частая и обманчивая претензия. Отмахнуться «всё ок» нельзя, но и валить на «природу транспорта» без цифр — тоже. Нужен протокол досмотра, который даёт вывод на цифрах: это объём трафика, число соединений, шторм переподключений, шаринг подписок — или скрытая утечка.

Эталон нормы: здоровая нода добавляет примерно +1–2% нагрузки на 100 онлайн-пользователей. Отклонение в разы — аномалия, а не «природа».

Шаг 0: исключить утечку gRPC к внутреннему API

Ядро ноды держит gRPC-сессию к своему же локальному API — служебному порту статистики. В некоторых версиях образа эти сессии текут: за 15 минут натекают десятки тысяч висящих коннектов, счётчик файловых дескрипторов растёт к сотням тысяч, RAM ползёт к OOM. Клиентский трафик при этом нормальный — если смотреть только на трафик и юзеров, утечку не увидишь.

ss -tn state established dst 127.0.0.1:<api_port> | wc -l   # норма = 1 (один штатный поллер)
ls /proc/$(pgrep -x <процесс-ядра>)/fd | wc -l               # FD сопоставим с числом клиентских коннектов

Лечение — только полный рестарт процесса (docker restart контейнера ноды). Панельный hot-reload делает reload конфигурации, PID не меняется, утечка не чистится. Проверка: ps -o lstart= -p <PID> — старое время старта означает, что рестарт не сработал. После настоящего рестарта established/FD/RAM падают на порядок. Хороший кандидат на watchdog: FD выше порога → авторестарт.

Развилка: объём или соединения

  1. Кто ест CPU/RAM — верить top -bn2 (мгновенный срез), а не ps -eo %cpu: последний врёт на короткоживущих процессах, ssh-сессия покажет 40% как средний за жизнь. LoadAvg делить на nproc.
  2. Сколько соединений и кудаss -tn state established; обычно почти всё на XHTTP-порту.
  3. Объём или количество? Топ пользователей по трафику за сутки из статистики панели. Топ качает десятки-сотни ГБ → виноват трафик. Топ ровный, единицы ГБ → грузит число соединений, идём дальше.
  4. Стабильные соединения или шторм? Замер ss на порту с интервалом 10 секунд, плюс TIME-WAIT и счётчик mux-ошибок. Стабильно, TIME-WAIT низкий → долгоживущие открытые стримы. Резкий рост, большой TIME-WAIT, тысячи mux-ошибок → churn-шторм, копать клиента.
  5. Шаринг подписок? Среднее число устройств на пользователя (норма около 1.7, максимум в пределах десятка).
  6. Запас conntracknf_conntrack_count против nf_conntrack_max.

Подводные камни

Вывод. Досматривать нагрузку ноды надо на цифрах и с эталоном +1–2% на 100 онлайн. Первым шагом — исключить утечку gRPC к внутреннему API (лечится только полным рестартом процесса, не hot-reload). Дальше развилка: объём, соединения, churn или шаринг. Ровная повышенная нагрузка на XHTTP — множитель стримов, норма. Нагрузка в разы выше эталона при спокойном трафике — ищите утечку, а не списывайте на транспорт.

Как подключиться за 2 минуты
Частые вопросы

Частые вопросы

Какая нагрузка на Xray-ноду считается нормальной на 100 онлайн-пользователей?
Эталон нормы — здоровая нода добавляет примерно +1–2% нагрузки на 100 онлайн-пользователей. Отклонение в разы от этого — аномалия, а не «природа транспорта».
Что нужно проверить первым делом, если нода грузится непропорционально числу юзеров?
Первый шаг — исключить утечку gRPC-сессии ядра ноды к собственному внутреннему API статистики: в некоторых версиях образа эти сессии текут, за 15 минут накапливаются десятки тысяч висящих коннектов, а клиентский трафик при этом выглядит нормальным.
Как отличить, что нагрузку создаёт объём трафика, а не число соединений?
Нужно посмотреть топ пользователей по трафику за сутки из статистики панели: если топ качает десятки-сотни ГБ, виноват объём трафика; если топ ровный и в пределах единиц ГБ, дело в количестве соединений.
Почему XHTTP грузит ноду сильнее, чем VLESS-Vision, при том же числе пользователей?
VLESS-Vision даёт 1–2 коннекта на клиента, а XHTTP — около 6 постоянных стримов на клиента. Это множитель соединений, который объясняет ровную повышенную нагрузку после смены транспорта, но не десятикратную аномалию — та почти наверняка утечка.
Почему нельзя доверять ps -eo %cpu при диагностике нагрузки ноды?
ps -eo %cpu показывает среднее за всю жизнь процесса и врёт на короткоживущих процессах — например, ssh-сессия может показать 40% как средний показатель. Верить нужно мгновенному срезу top -bn2.
Похожее

Ещё в базе знаний

Подключите рабочий VPN

Инструкции базы знаний написаны под ключи VPN PRO: ключ выдаёт Telegram-бот за минуту, работоспособность гарантируем. Промокод VPN10 — 10 дней бесплатно, без карты.

Промокод VPN10 — 10 дней бесплатно · до 31 августа · передавайте друзьям